1)使用一个用于标记的数组B[n], B的下标也就是括号里的值对应正整数,B[n]对应的值用来标记是否已经出现过,1表示出现,0则未出现,B[0]对应正整数1,B[n-1]对应正整数n,从A[0]开始遍历A,若能查找到第一个满足B[i]==0的下标,返回i+1,即为结果,若B[i]全部不为0,则返回i+1,此时A中未出现的最小正整数是n+1。
2)c语言描述:
int findMissmin(int A[],int n){int i,*B;B=(int*)malloc(n*sizeof(int));memset(B,0,n*sizeof(int));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;
}
3)时间复杂度O(n),使用了额外的辅助数组B[n],空间复杂度O(n)