题目
Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.
Your algorithm should run in O(n) time and uses constant space.
分析
这题是hard,但是感觉并不是很难啊。首先使用一个数组记录每个正整数是否出现过。然后从小到大检查该数组,输出第一个未出现的数字即可。
实现
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
if(nums.empty()) return 1;
bool flag[nums.size()] = {false};
for(int i=0; i<nums.size(); i++){
if(nums[i]>0 && nums[i]<nums.size()+1)
flag[nums[i]-1] = true;
}
for(int i=0; i<nums.size(); i++){
if(!flag[i])
return i+1;
}
return nums.size()+1;
}
};
思考
在做题的过程中发现,使用auto比使用int型下标来遍历vector要慢。所以也许使用的时候要多注意。