缺失的第一个正整数
题目:缺失的正整数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
方法一:将数组提出0以下的数字然后从小到大排序,然后从1遍历到最大值,如果存在没有的数字则为最小
const firstMissingPositive = (nums) => {
let tNums = nums.filter((a) => a >= 0)
let min = Math.min(...tNums)
if (min > 1) return min - 1
let eNums = Array.from(new Set(tNums.sort((a, b) => a-b)))
let minVal = min + 1,
minPos = 1
while (minPos < eNums.length) {
if (eNums[minPos] > minVal) break
if (eNums[minPos] == minVal) {
minVal++
}
minPos++
}
return minVal
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
方法二:借助辅助map,将数字映射到map上。从1遍历到最大值 + 1,如果存在没有的数字则该值为最小正整数
let map = {},
max = Math.max(...nums)
if (max <= 0) return 1
for (let i = 0; i < nums.length; i++) {
map[nums[i]] = true
}
for (let i = 1; i <= max + 1; i++) {
if (!map.hasOwnProperty(i)) return i
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
上次更新: 2025/09/05, 8:09:00