要处理的值:nums[i] 是正整数,nums[i] 不大于数组长度(大于数组长度的不需要处理),nums[i] 不在 nums[i]-1 的位置上(调换到应该在的位置),再次判断nums[i]位置上的值是否需要处理
遍历数组,如果nums[i] 的值不等于 (i+1),则(i+1)为缺失的最小正整数
/**
* @param {number[]} nums
* @return {number}
*/
const swap = function(nums, i, j){
[nums[i], nums[j]] = [nums[j], nums[i]]
}
var firstMissingPositive = function(nums) {
let len = nums.length
for(let i = 0; i < len; i++){
while(nums[i] >= 1 && nums[i] <= len && nums[i] != nums[nums[i] - 1]){
swap(nums, i, nums[i] - 1)
}
}
for(let i = 0; i < len; i++){
if(nums[i] != (i + 1)){
return (i + 1)
}
}
// 如果都符合在对应的位置,则返回数组长度+1的值
return nums.length + 1
};