- 给定一个含 n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算 法,找出数组中未出现的最小正整数。例如,数组{-5, 3, 2, 3}中未出现的最小正整数是 1;数组{1, 2, 3}中未出现的最小正整数是 4。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。
int findMin(int A[], int n) {
int i, *B;
B = (int *)malloc(sizeof(int*)n);
memset(B, 0, sizeof(int)*n);
for (int i = 0; i < n; i++) {
if (A[i] > 0 && A[i] <= n) {
B[A[i]-1] = 1; //将1-n之间的正整数进行标记
}
}
for (int i = 0 ; i< n; i++) {
if (B[i] == 0) {
return (i + 1); //因为数组下标的范围是[0,n) ,而其对应的是[1,n]
}
}
return 0;
}