首先需要理解题目的意思,也就是需要输出最小的未出现的正整数。
强调一遍,写代码之前必须先分析整个过程以及答案的情况。
由于N<=10E5,可知最小的未出现的必然在[1,100001]中(如果不在其中,则代表这100001个数字都出现,显然与最多100000相矛盾),所以可以利用数组直接标记其中某个数是否出现,最后遍历即可。
#include<stdio.h>
int main(){
int i,n,t,data[100002]={0};//初始为0表示未出现
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&t);
if(t>0&&t<100002)//其他情况直接舍去
data[t]=1;
}
for(i=1;i<100002;i++){
if(data[i]==0){
printf("%d",i);
break;
}
}
return 0;
}
本文介绍了一种算法,用于找出给定数组中最小的未出现的正整数。通过使用固定大小的布尔数组来标记已出现的数字,从而高效地解决了问题。
1577

被折叠的 条评论
为什么被折叠?



