厦门网络营销顾问百度seo培训
看了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;}elseswap(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;}
};