javascript
var firstMissingPositive = function(nums) {
const n=nums.length;
for(let i=0;i<n;i++){
while(nums[i]>0&&nums[i]<=n&&nums[i]!=nums[nums[i]-1]){
const j=nums[i]-1;
[nums[i],nums[j]]=[nums[j],nums[i]];
}
}
for(let i=0;i<n;i++){
if(nums[i]!=i+1) return i+1;
}
return n+1;
};
算法核心:先通过循环交换,使得每个位置上的值是与其索引相对应的,比如nums[0]=1,nums[1]=2...负数和0不管直接跳过,重复的也直接跳过,排序完之后,遍历数组,如果nums[i]!=i+1,说明i+1就是缺失的正数,如果全部都符合,就返回n+1
算法注意点:循环的终止条件
javascript
nums[i]!=nums[nums[i]-1]
我们不要用nums[i]!=i+1这个条件,因为nums[i]!=nums[nums[i]-1]不仅可以包括前面的那个条件,还可以跳过重复的数比如数组[1,1,2]