1)利用鸽巢原理(抽屉原理),开一个数组b[n+1],其中b[i]表示i出现的次数。
由于数组长度为n,那么数组未出现的最小正整数一定在1~n中,遍历1~n找到b[i]==0即可。
有一种例外,即抽屉全满,a(n)的n个数据元素刚好填满了1~n,那么答案则为n + 1。
2)代码
void zhao(int a[], int n)
{
int b[n + 1];
for (int i = 1; i <= n; i ++) b[i] = 0;
for (int i = 0; i < n; i ++ )
{
if (0 < a[i] && a[i] <= n) b[a[i]] ++;
}
for (int i = 1; i <= n; i ++ )
if (b[i] == 0) return i;
return n + 1;
}
3)时间复杂度On,空间复杂度On