给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5,3,2,3}中未出现的最小正整数是1;数组{1,2,3}中未出现的最小正整数是4。 要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间和空间复杂度。
思路:创建一个足够大的数组,并且初始化为0,A[i]中存放i,这样就可以保证各元素有序且不重复的在数组中存放,又因为无法放负值,所以使得题目更加简化,遍历整个数组,输出第一个为0数组元素的下标即为未出现的最小正整数
代码实现:
#include <stdio.h>
int main(){
int A[100]={0};
int n=0;
int t=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&t);
A[t]=t;
}
for(int i=1;i<100;i++){
if(A[i]==0){
printf("%d",i);
break;
}
}
}