LeetCode--041--缺失的第一个整数(java)
发布日期:2025-04-05 02:37:17 浏览次数:17 分类:精选文章

本文共 821 字,大约阅读时间需要 2 分钟。

要解决给定未排序的整数数组中找出没有出现的最小正整数的问题,我们可以使用一种高效且只占用常数级别空间的方法。以下是解决问题的详细步骤和优化后的代码:

方法思路

我们可以通过遍历数组来检查每个数字,找到最小的未出现的正整数。具体步骤如下:

  • 初始化变量:设置一个变量 res 初始化为 1,它表示我们要找的最小的正整数。
  • 遍历数组:对于数组中的每一个数 num
    • 如果 num 等于 res,说明这个数已经被访问过,我们更新 res 为下一个需要检查的值。
    • 如果 num 大于 res,说明在 resnum 之间有一个或多个数未被访问到,因此返回 res 作为结果。
    • 如果 num 小于 res,继续检查下一个数。
  • 结束循环检查:如果整个遍历完成后仍未找到符合条件的数,返回当前的 res,它将会是数组中最后一个数加 1。
  • 这种方法的时间复杂度为 O(n),只需一次遍历,且只使用常数级别的空间,满足了题目的要求。

    优化后的代码

    def first_missing_positive(nums):
    res = 1
    for num in nums:
    if num == res:
    res += 1
    elif num > res:
    return res
    return res

    代码解释

    • 初始化 res 为 1:这是我们要找的最小正整数。
    • 遍历每个数 num:检查每个数是否等于当前的 res,从而决定下一步操作。
      • 如果 num 等于 resres 加1,继续检查下一个更大的数。
      • 如果 num 大于 res,说明 res 处还有缺失,立刻返回 res
    • 结束条件:如果整个数组遍历完毕而没有找到任何大于 res 的数,返回 res,它会是由数组中最后一个数加1后的结果。

    这种方法简洁高效,能够在 O(n) 时间和常数级别空间内解决问题。

    上一篇:leetcode--2.两数相加
    下一篇:LeetCode--020--括号匹配

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年05月10日 14时57分07秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章