📌  相关文章
📜  即,给定一个包含 n 个整数的数组 a,返回 a 中未出现的最小正整数(大于 0).蟒蛇(1)

📅  最后修改于: 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

结果与预期一致。