给n个(1<=n<=1000)非负整数(0<=xi<=1000),请找到不在这n个非负整数中的最小的非负整数。
水题,题目英文。自认为有一个小技巧,与官方解法不同。
首先,定义1010数组与n。for循环输入n个数(这一步谁都少不了吧),然后C++ sort(a,a+n);
此时数组a中输入的数都是从小到大排列的;
然后,检查a[0]的值是否为0,如果不是,直接printf("0");return 0;
如果a[0]==0,则一个for循环(int i=1;i<n;i++)判断a[i]-a[i-1],如果a[i]-a[i-1]>1,则证明a[i-1]与a[i]之间肯定间隔元素,直接printf("%d",a[i-1]+1);return 0;
如果for()循环没有结束,则证明输入的数据连续,则直接打印printf("%d",a[n-1]+1);即可,然后return 0;
利用3种情况分开讨论,每种情况及时return 0;
注:sort()函数时间复杂度O(nlogn),for()循环遍历最大为O(n).
附代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int a[1010],n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
if(a[0])
{
printf("0");
return 0;
}
for(int i=1;i<n;i++)
{
if(a[i]-a[i-1]>1)
{
printf("%d",a[i-1]+1);
return 0;
}
}
printf("%d",a[n-1]+1);
return 0;
}