Appearance
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
- 来源:力扣(LeetCode)
- 链接:https://leetcode.cn/problems/first-missing-positive
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)