fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void swap(int* a, int* b)
  4. {
  5. int temp;
  6. temp = *a;
  7. *a = *b;
  8. *b = temp;
  9. }
  10. int segregate(int arr[], int size)
  11. {
  12. int j = 0, i;
  13. for (i = 0; i < size; i++) {
  14. if (arr[i] <= 0) {
  15. swap(&arr[i], &arr[j]);
  16. j++;
  17. }
  18. }
  19.  
  20. return j;
  21. }
  22.  
  23. int findMissingPositive(int arr[], int size)
  24. {
  25. int i;
  26. for (i = 0; i < size; i++) {
  27. if (abs(arr[i]) - 1 < size && arr[abs(arr[i]) - 1] > 0)
  28. arr[abs(arr[i]) - 1] = -arr[abs(arr[i]) - 1];
  29. }
  30.  
  31. for (i = 0; i < size; i++)
  32. if (arr[i] > 0)
  33. return i + 1;
  34. return size + 1;
  35. }
  36. int findMissing(int arr[], int size)
  37. {
  38. int shift = segregate(arr, size);
  39. return findMissingPositive(arr + shift, size - shift);
  40. }
  41.  
  42. int main()
  43. {
  44. int arr[10],n;
  45. scanf("%d",&n);
  46. for(int i=0;i<n;i++)
  47. scanf("%d",&arr[i]);
  48. int missing = findMissing(arr, n);
  49. printf("The missing number is %d ", missing);
  50. return 0;
  51. }
  52.  
  53.  
Success #stdin #stdout 0s 4236KB
stdin
5
1 0 3 4 6
stdout
The missing number is 2