1144 The Missing Number (20 point(s))
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. Hash表记录,但是在INT范围内,不能开那么大的哈希表(18分)
#include<iostream>
using namespace std;
const int MAX = 1e5+7;
int a[MAX]={0};
int main(void){
int n,m;
cin>>n;
for(int i=0;i<n;i++){
cin>>m;
a[m]++;
}
for(int i=1;i<MAX;i++){
if(a[i]==0){
cout<<i<<endl;
break;
}
}
return 0;
}
做法2:排序,注意细节(如数的范围)
#include<iostream>
#include<algorithm>
using namespace std;
const int MAX = 1000007;
int arr[MAX]={0};
int main(void)
{
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>arr[i];
sort(arr,arr+n);
int idx = 0;
while(arr[idx]<=0) idx++;
for(int i=1;;){
if(idx<n&&i==arr[idx]){
while(idx<n&&i==arr[idx]){
idx++;
}
i++;
}
else{
cout<<i<<endl;
break;
}
}
return 0;
}
3. set
#include <bits/stdc++.h>
using namespace std;
int main(){
int N,a;
scanf("%d",&N);
unordered_set<int>s;
while(N--){
scanf("%d",&a);
s.insert(a);
}
for(int i=1;true;++i)
if(s.find(i)==s.cend()){
printf("%d",i);
break;
}
return 0;
}