/**
* @param {number[]} nums
* @return {number}
*/
var firstMissingPositive = function(nums) {
nums.forEach((n, i) => {
if (n <= 0) nums[i] = nums.length + 1
})
let a = false
let t
nums.forEach(n => {
if (Math.abs(n) === nums.length) {
a = true
return
}
if (n < 0) {
t = -n
if (t < nums.length) {
if (nums[t] > 0) {
nums[t] = -nums[t]
}
}
} else if (n > 0 && n < nums.length) {
if (nums[n] > 0) {
nums[n] = -nums[n]
}
}
})
for (let i = 1
if (nums[i] > 0) {
return i
}
}
return a ? (nums.length + 1) : nums.length
}
// console.info(firstMissingPositive( [1,0,3,3,0,2]))
// console.info(firstMissingPositive( [1,1000]))
// console.info(firstMissingPositive( [1,2,0]))
// console.info(firstMissingPositive([3,4,-1,1]))
// console.info(firstMissingPositive([7,8,9,11,12]))
/**
* 最小的正整数只会出现在[1, n + 1](如果[1, n]都出现了,则答案为n + 1。如果有任何一个没出现过,则为[1, n])
* 将[1,n]映射至 nums, 出现过则设为负数。最后遍历下标,找第一个不为负数的下标。
*/