📅  最后修改于: 2023-12-03 15:37:04.321000             🧑  作者: Mango
本题目要求在给定包含 n 个整数的数组中,找到未出现的最小正整数。以下是一种常见的解法,时间复杂度为 O(n),空间复杂度为 O(1)。
以数组 [3, 4, -1, 1] 为例,我们可以利用该数组的下标和元素值之间的关系来解决本题。
首先,我们可以将数组的所有元素都放于正确的位置。即,如果元素值为 x,则我们将其放到下标为 x-1 的位置上。例如,元素值为 3 的元素将会放到下标为 2 的位置上。
在重新排列之后,我们再遍历一遍数组,寻找第一个下标 i+1 不等于元素值的位置 i。即,如果 a[i] != i+1,则 (i+1) 即为答案。如果整个数组中的所有元素都处于正确的位置上,则答案为数组长度 + 1。
以下是使用 Python 语言实现的代码:
def find_missing_positive(nums):
n = len(nums)
# 将所有值为 x 的元素放到下标为 x-1 的位置上
for i in range(n):
while 1 <= nums[i] <= n and nums[nums[i]-1] != nums[i]:
nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
# 返回第一个下标 i+1 不等于元素值的位置 i
for i in range(n):
if nums[i] != i+1:
return i+1
# 整个数组都处于正确位置上,返回 n+1
return n+1
我们使用题目提供的样例数组 [3, 4, -1, 1] 进行验证:
>>> find_missing_positive([3, 4, -1, 1])
2
结果与预期一致。