leetcode41.缺失的第一个正数
看了b站视频题解才写出来
这个最小正数的结果一定在1~nums.size()+1之中,这里利用原地哈希的做法,将num放在num-1索引处(num非正数或者大于数组长度则随意放置);原地哈希完毕后进行遍历,对于没有按照如上规则放置的数,它的索引+1即为最终结果
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
for(int i=0;i<nums.size();){
if(nums[i]<=0||nums[i]>nums.size()||nums[i]==i+1||nums[i]==nums[nums[i]-1]){
i++;
continue;
}
else
swap(nums[i],nums[nums[i]-1]);
}
for(int i=0;i<nums.size();i++)
if(nums[i]!=i+1)
return i+1;
return nums.size()+1;
}
};