📌  相关文章
📜  查找未排序数组中缺失的最小正数 |设置 1(1)

📅  最后修改于: 2023-12-03 15:26:38.544000             🧑  作者: Mango

查找未排序数组中缺失的最小正数

有一个未排序的整数数组,你需要在其中找到缺失的最小正数。

设计思路
  1. 首先遍历数组,将所有负数和0替换为1;

  2. 接着再一次遍历数组,将出现的正整数在一个新数组中标记出来;

  3. 最后再遍历这个新数组,如果出现数字与下标不一致,则返回下标加1,否则返回数组长度加1。

代码实现
def find_missing_positive(nums):
    # 第一次遍历,将负数和0全部替换为1
    for i in range(len(nums)):
        if nums[i] <= 0:
            nums[i] = 1
    # 第二次遍历,将出现的数字在一个新数组中标记出来
    n = len(nums)
    for i in range(n):
        num = abs(nums[i])
        if num <= n:
            nums[num - 1] = -abs(nums[num - 1])
    # 第三次遍历,找到第一个下标与数字不一致的地方
    for i in range(n):
        if nums[i] > 0:
            return i + 1
    # 如果都一致,则返回数组长度加1
    return n + 1
总结

这道题的难点在于数组未排序且要找到缺失的最小正数,因此我们需要通过遍历数组,替换掉负数和0,最后再根据新数组的情况,找到缺失的最小正数。