版本2
可以适当的做一点优化,考查的散列。但是这道题还可以优化,详情见左程云的面试指南。
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#include <cstring>
#include <unordered_map>
#include <algorithm>
using namespace std;
const int N = 1e5+5;
int arr[N] = {0};
int main(){
int n, x;
scanf("%d", &n);
int r = n;
for(int i = 0; i < n; i++){
scanf("%d", &x);
if(x > 0 && x <= r) arr[x] = 1;
else r--;
}
for(int i = 1; i <= r+1; i++){
if(arr[i] == 0) {
printf("%d\n", i);
break;
}
}
return 0;
}
版本1
map的应用,注意使用数组hash会在最后一个测试点上超时,而且数组开不了int范围大小的空间。
#include<cstdio>
#include<cstring>
#include<unordered_map>
using namespace std;
int main(){
int n,x;
unordered_map<int,bool> mp;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x);
mp[x] = true;
}
for(int i=1;;i++){
if(mp[i] == false){
printf("%d",i);
break;
}
}
return 0;
}