Skip to content
On this page

41. 缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:
输入:nums = [1, 2, 0]
输出:3

示例 2:
输入:nums = [3, 4, -1, 1]
输出:2

示例 3:
输入:nums = [7, 8, 9, 11, 12]
输出:1

提示:
1 <= nums.length <= 5 * 105
-231 <= nums[i] <= 231 - 1

javascript
/**
 * @param {number[]} nums
 * @return {number}
 */
var firstMissingPositive = function (nums) {
  const len = nums.length
  for (let i = 0; i < len; i++) {
    while (nums[i] > 0 && nums[i] <= len && nums[nums[i] - 1] !== nums[i]) {
      swap(nums, nums[i] - 1, i)
    }
  }
  for (let i = 0; i < len; i++) {
    if (nums[i] !== i + 1) {
      return i + 1
    }
  }
  return len + 1
}

function swap(nums, idx1, idx2) {
  const temp = nums[idx1]
  nums[idx1] = nums[idx2]
  nums[idx2] = temp
}

var firstMissingPositive = function (nums) {
  for (let i = 1; i < nums.length + 2; i++) {
    if (nums.indexOf(i) === -1) return i
  }
}

console.log(firstMissingPositive([1, 2, 0]) === 3)
console.log(firstMissingPositive([3, 4, -1, 1]) === 2)
console.log(firstMissingPositive([7, 8, 9, 11, 12]) === 1)