题目
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
思路
刚开始,觉得这道题可能要考察时间复杂度,因为正确率只有40%,怀疑存在坑导致样例通不过。写完代码,没想到一遍运行就过了。复杂度还不错,O(n).
我使用哈希表来储存数组中的每一个元素。遍历完一遍之后,使用while循环,从i=0,开始,找到哈希表中第一个hashmap[i]==0的情况,即该正数i并没有出现在数组里,所以i为缺失的第一个正数。
代码
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
map<int,int> a;
for(int i=0;i<nums.size();i++){
a[nums[i]]++;
}
int i=1;
while(1){
if(a[i]==0)return i;
else i++;
}
return -1;
}
};