题目
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
大意
给出一串数字,找出未出现的最小正整数。
直觉
我是用hash表解决这个问题。
非常简单的一题,甚至你可以用排序解决这个问题。
hash表有一个坑,最后一个测试点我一开始会报段错误,仔细研究应该是因为最后一个测试点有一个非常大的数字(可能是2^32-1). 所以一定要判断hash要存入的范围。
复杂度分析
O(N),hash:空间换时间
代码
#include<iostream>
using namespace std;
bool hashl[100010]={0};
int main(){
int n;
cin>>n;
for(int i=0;i<n;++i){
int temp;
cin>>temp;
if(temp>0&&temp<100010) hashl[temp]=1;
}
for(int i=1;i<100010;++i){
if(hashl[i]==0){
cout<<i;
return 0;
}
}
}
提交时间 状态 分数 题目 编译器 耗时 用户
2019/8/28 01:59:13
答案正确
20 1144 C++ (g++) 47 ms Chester
测试点 结果 耗时 内存
0 答案正确 2 ms 424 KB
1 答案正确 3 ms 384 KB
2 答案正确 3 ms 384 KB
3 答案正确 3 ms 364 KB
4 答案正确 46 ms 384 KB
5 答案正确 40 ms 384 KB
6 答案正确 47 ms 424 KB