Difference between revisions of "TADM2E 4.34"
From Algorithm Wiki
(Created page with "Assume array indices are zero based, use modified binary search to find the smallest integer missing: <pre> FindMinIntMissing(A): // elements in the array are continuous,...") |
|||
Line 14: | Line 14: | ||
else | else | ||
{ | { | ||
− | return findGap( | + | return findGap(A, 0, n - 1); |
} | } | ||
Line 26: | Line 26: | ||
// first half doesn't have gap, looking for gap in the second half | // first half doesn't have gap, looking for gap in the second half | ||
if(A[mid] - A[first] == mid - first) | if(A[mid] - A[first] == mid - first) | ||
− | return findGap( | + | return findGap(A, mid, last); |
// looking for the gap in the first half | // looking for the gap in the first half | ||
else | else | ||
− | return findGap( | + | return findGap(A, first, mid); |
</pre> | </pre> |
Revision as of 00:20, 23 September 2016
Assume array indices are zero based, use modified binary search to find the smallest integer missing:
FindMinIntMissing(A): // elements in the array are continuous, the smallest missing integer is either 1 if A[0] is not 1, or n + 1 otherwise if(A[n - 1] - A[0] == n - 1) { if(A[0] > 1) return 1; else return n + 1; } // there is a gap in A, find the gap that is smallest else { return findGap(A, 0, n - 1); } FindGap(A, first, last): // only two elements left, the smallest gap must be the integer right after A[first] if(last == first + 1) return A[first] + 1; // recursively looking for the partition containing the smallest gap else mid = (first + last) / 2; // first half doesn't have gap, looking for gap in the second half if(A[mid] - A[first] == mid - first) return findGap(A, mid, last); // looking for the gap in the first half else return findGap(A, first, mid);