题目描述
✅ 41. 缺失的第一个正数
思路分析
我们可以使用原地哈希的方法来解决这个问题。具体步骤如下:
- 遍历数组,对于每个元素
nums[i]
,如果 1 <= nums[i] <= n
,并且 nums[i]
不在正确的位置上(即 nums[i] != nums[nums[i] - 1]
),则将 nums[i]
放到正确的位置上。
- 再次遍历数组,找到第一个
nums[i] != i + 1
的位置,返回 i + 1
。
- 如果所有位置都正确,则返回
n + 1
。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// 缺失的第一个正数函数
func firstMissingPositive(nums []int) int {
n := len(nums)
// 将每个元素放到正确的位置上
for i := 0; i < n; i++ {
for nums[i] > 0 && nums[i] <= n && nums[nums[i]-1] != nums[i] {
nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
}
}
// 找到第一个不在正确位置上的元素
for i := 0; i < n; i++ {
if nums[i] != i+1 {
return i + 1
}
}
return n + 1
}
|
➡️ 点击查看 Java 题解
版权声明:
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!