算法思路:用一个指示数组B[ ] 来存放数组的正整数分布。
开始时候,B[ ]中初始化值全部为0。现在遍历原始数组中全部元素,如果满足值在1-n之间,将B[A[i] -1]由0置1(下标和数值之间差1,B[ ]置1的元素对应和A[ ]完全正常时相同的元素,B[ ]中剩下为0的元素的下标就是缺少所有正整数的下标,最小正整数 =下标(最小的) + 1;
int Find_missing_min(int A[],int n){
int i,*B;
B = (int *)malloc(sizeof(int)*n);
memset(B,0,sizeof(int)*n);
for (i = 0;i<n;i++){
if (A[i]>0 && A[i]<=n)
B[A[i]-1] = 1;
}
for (i=0;i<n;i++){
if (B[i] == 0)
break;
}
return i+1;
} //返回所求的值,等于下标加1
(3)时间复杂度O(n);因为创建了新的数组B[ ] ,空间复杂度O(n)