/* CPP program to find the smallest
positive missing number */
#include <bits/stdc++.h>
using namespace std;
// Function to find smallest positive
// missing number.
int findMissingNo(int arr[], int n)
{
// to store current array element
int val;
// to store next array element in
// current traversal
int nextval;
for (int i = 0; i < n; i++) {
// if value is negative or greater
// than array size, then it cannot
// be marked in array. So move to
// next element.
if (arr[i] <= 0 || arr[i] > n)
continue;
val = arr[i];
// traverse the array until we
// reach at an element which
// is already marked or which
// could not be marked.
while (arr[val - 1] != val) {
nextval = arr[val - 1];
arr[val - 1] = val;
val = nextval;
if (val <= 0 || val > n)
break;
}
}
// find first array index which is
// not marked which is also the
// smallest positive missing
// number.
for (int i = 0; i < n; i++) {
if (arr[i] != i + 1) {
return i + 1;
}
}
// if all indices are marked, then
// smallest missing positive
// number is array_size + 1.
return n + 1;
}
// Driver code
int main()
{
int arr[] = { 2, 3, 7, 6, 8, -1, -10, 15,1 };
int arr_size = sizeof(arr) / sizeof(arr[0]);
int missing = findMissingNo(arr, arr_size);
for(int i=0;i<arr_size;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
cout << "The smallest positive missing number is"<<missing;
}
LyogQ1BQIHByb2dyYW0gdG8gZmluZCB0aGUgc21hbGxlc3QgIAogIHBvc2l0aXZlIG1pc3NpbmcgbnVtYmVyICovCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgCiAgCi8vIEZ1bmN0aW9uIHRvIGZpbmQgc21hbGxlc3QgcG9zaXRpdmUgCi8vIG1pc3NpbmcgbnVtYmVyLiAKaW50IGZpbmRNaXNzaW5nTm8oaW50IGFycltdLCBpbnQgbikgCnsgCiAgICAvLyB0byBzdG9yZSBjdXJyZW50IGFycmF5IGVsZW1lbnQgCiAgICBpbnQgdmFsOyAKICAKICAgIC8vIHRvIHN0b3JlIG5leHQgYXJyYXkgZWxlbWVudCBpbiAKICAgIC8vIGN1cnJlbnQgdHJhdmVyc2FsIAogICAgaW50IG5leHR2YWw7IAogIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsgCiAgCiAgICAgICAgLy8gaWYgdmFsdWUgaXMgbmVnYXRpdmUgb3IgZ3JlYXRlciAKICAgICAgICAvLyB0aGFuIGFycmF5IHNpemUsIHRoZW4gaXQgY2Fubm90IAogICAgICAgIC8vIGJlIG1hcmtlZCBpbiBhcnJheS4gU28gbW92ZSB0byAKICAgICAgICAvLyBuZXh0IGVsZW1lbnQuIAogICAgICAgIGlmIChhcnJbaV0gPD0gMCB8fCBhcnJbaV0gPiBuKSAKICAgICAgICAgICAgY29udGludWU7IAogIAogICAgICAgIHZhbCA9IGFycltpXTsgCiAgCiAgICAgICAgLy8gdHJhdmVyc2UgdGhlIGFycmF5IHVudGlsIHdlIAogICAgICAgIC8vIHJlYWNoIGF0IGFuIGVsZW1lbnQgd2hpY2ggCiAgICAgICAgLy8gaXMgYWxyZWFkeSBtYXJrZWQgb3Igd2hpY2ggCiAgICAgICAgLy8gY291bGQgbm90IGJlIG1hcmtlZC4gCiAgICAgICAgd2hpbGUgKGFyclt2YWwgLSAxXSAhPSB2YWwpIHsgCiAgICAgICAgICAgIG5leHR2YWwgPSBhcnJbdmFsIC0gMV07IAogICAgICAgICAgICBhcnJbdmFsIC0gMV0gPSB2YWw7IAogICAgICAgICAgICB2YWwgPSBuZXh0dmFsOyAKICAgICAgICAgICAgaWYgKHZhbCA8PSAwIHx8IHZhbCA+IG4pIAogICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgIH0gCiAgICB9IAogIAogICAgLy8gZmluZCBmaXJzdCBhcnJheSBpbmRleCB3aGljaCBpcyAKICAgIC8vIG5vdCBtYXJrZWQgd2hpY2ggaXMgYWxzbyB0aGUgCiAgICAvLyBzbWFsbGVzdCBwb3NpdGl2ZSBtaXNzaW5nIAogICAgLy8gbnVtYmVyLiAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7IAogICAgICAgIGlmIChhcnJbaV0gIT0gaSArIDEpIHsgCiAgICAgICAgICAgIHJldHVybiBpICsgMTsgCiAgICAgICAgfSAKICAgIH0gCiAgCiAgICAvLyBpZiBhbGwgaW5kaWNlcyBhcmUgbWFya2VkLCB0aGVuIAogICAgLy8gc21hbGxlc3QgbWlzc2luZyBwb3NpdGl2ZSAKICAgIC8vIG51bWJlciBpcyBhcnJheV9zaXplICsgMS4gCiAgICByZXR1cm4gbiArIDE7IAp9IAogIAovLyBEcml2ZXIgY29kZSAKaW50IG1haW4oKSAKeyAKICAgIGludCBhcnJbXSA9IHsgMiwgMywgNywgNiwgOCwgLTEsIC0xMCwgMTUsMSB9OyAKICAgIGludCBhcnJfc2l6ZSA9IHNpemVvZihhcnIpIC8gc2l6ZW9mKGFyclswXSk7IAogICAgaW50IG1pc3NpbmcgPSBmaW5kTWlzc2luZ05vKGFyciwgYXJyX3NpemUpOyAKICAgIGZvcihpbnQgaT0wO2k8YXJyX3NpemU7aSsrKXsKICAgIAljb3V0PDxhcnJbaV08PCIgIjsKICAgIH0KICAgIGNvdXQ8PGVuZGw7CiAgICBjb3V0IDw8ICJUaGUgc21hbGxlc3QgcG9zaXRpdmUgbWlzc2luZyBudW1iZXIgaXMiPDxtaXNzaW5nOwp9CiAgICA=