41. 缺失的第一个正数
分析
-
原地哈希:
- 对于一个长度为
n
的数组,最小的缺失正整数只能在1
到n+1
之间 - 遍历数组,对于每个数字
nums[i]
,如果满足条件1 ≤ nums[i] ≤ n
且nums[i] != nums[nums[i] - 1]
,则将其交换到正确的位置 - 通过循环交换,可以在原地调整数组顺序
- 对于一个长度为
-
检查缺失:
- 调整完成后,遍历数组,检查每个位置是否满足
nums[i] == i + 1
- 如果存在不满足的位置,则返回
i + 1
- 如果所有位置都满足,说明数组包含所有
1
到n
的正整数,缺失的正整数为n + 1
- 调整完成后,遍历数组,检查每个位置是否满足
时间复杂度
每个数字最多只会被交换一次,因此总操作次数为 O(n)
空间复杂度
原地调整数组,无额外空间开销,空间复杂度为 O(1)
C++代码
|
|