1144 The Missing Number
Given N integers, you are supposed to find the smallest positive integer that is NOT in the given list.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤105). Then N integers are given in the next line, separated by spaces. All the numbers are in the range of int.
Output Specification:
Print in a line the smallest positive integer that is missing from the input list.
Sample Input:
10
5 -25 9 6 1 3 4 2 5 17
Sample Output:
7
总结:这道题目不难,算是一道签到题,先将数组排序,然后记录下出现的数字,最后从1开始循环一直到100001,查看哪一个数字是缺少的
代码:
#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_map>
using namespace std;
int main(){
int n;
scanf("%d",&n);
vector<int> v(n);
unordered_map<int,bool> m;
for(int i=0;i<n;i++) scanf("%d",&v[i]);
sort(v.begin(),v.end());
for(int i=0;i<n;i++) m[v[i]]=true;
//N的取值范围是<=10^5,所以最多可以有从 1 开始的连续的数,一直到 100000结束,所以这种情况下,缺失的最小正整数是100001,循环的大一点
for(int i=1;i<=100002;i++) if(!m[i]){
printf("%d\n",i);
break;
}
return 0;
}
柳神代码:
简洁好多,膜拜!
#include <iostream>
#include <map>
using namespace std;
int main(){
int n,t,num=1;
scanf("%d",&n);
map<int,int> m;
for(int i=0;i<n;i++){
scanf("%d",&t);
m[t]=1;
}
while(num++){//如果初始化num为0的话,那么是不会进入循环
if(!m[num-1]){
printf("%d\n",num-1);
break;
}
}
return 0;
}
好好学习,天天向上!
我要考研!