缺失的第一个正数-面试热题 100?-Lua 中文代码解题第5题

缺失的第一个正数-面试热题 100?-Lua 中文代码解题第5题

解题思路: 

  1. 遍历数组并尝试将元素放入正确的位置: 遍历输入数组 nums,对于每个元素 nums[i]:

    • 如果 nums[i] 是一个正整数,并且它的值小于或等于数组的长度(即在有效范围内),则检查对应下标的值 nums[nums[i]] 是否与 nums[i] 相等。
      • 如果不相等,说明 nums[i] 的位置不是其应该在的位置。此时交换 nums[i] 和 nums[nums[i]] 的值,试图将 nums[i] 放到它应该在的位置上(nums[nums[i]] 应该为 i)。
  2. 寻找未出现的最小正整数: 再次遍历数组 nums,由于前面的操作,数组中下标 i 与值 nums[i] 不匹配的位置(nums[i] 不等于 i)表示原数组中数值为 i 的元素没有出现过。因此,我们只需找到第一个这样的位置 i,返回 i 作为结果。

通过这个方法,可以在遍历一次数组的基础上完成题目要求的任务,虽然在极端情况下时间复杂度可能退化,但在大多数情况下可以实现 O(n) 的平均时间复杂度,并且只使用了常数级别的额外空间。

中文代码 -- 无注释版
函数 缺少的首个正数(输入数组)
    局部 n = #输入数组
    因为 i = 1, n 做
        当 输入数组[i] > 0 与 输入数组[i] <= n 与 输入数组[输入数组[i]] ~= 输入数组[i] 做
            局部 临时数 = 输入数组[i]
            输入数组[i] = 输入数组[临时数]
            输入数组[临时数] = 临时数
        结束
    结束

    因为 i = 1, n 做
        如果 输入数组[i] ~= i 即
            返回 i
        结束
    结束
    返回 n + 1
结束
中文代码 -- 带注释的如下:
-- 缺少的首个正数函数
-- 参数:输入数组,一个包含任意整数的数组
-- 返回值:一个整数,表示输入数组中缺失的首个正数
函数 缺少的首个正数(输入数组)
    局部 n = #输入数组  -- 输入数组的长度

    -- 将输入数组中每个元素替换为该元素所指向的索引上对应的值(如果该值是有效的)
    因为 i = 1, n 做
        当 输入数组[i] > 0 与 输入数组[i] <= n 与 输入数组[输入数组[i]] ~= 输入数组[i] 做
            局部 临时数 = 输入数组[i]
            输入数组[i] = 输入数组[临时数]
            输入数组[临时数] = 临时数
        结束
    结束

    -- 查找缺失的首个正数
    -- 如果输入数组中的元素不等于其对应的索引值,则返回该索引
    因为 i = 1, n 做
        如果 输入数组[i] ~= i 即
            返回 i
        结束
    结束
    -- 如果没有找到缺失的正数,则返回数组长度加一
    返回 n + 1
结束
这段代码运行后将会输出:
-- 测试用例
局部 输入数组1 = {1, 2, 0}
输出(缺少的首个正数(输入数组1))  -- 输出:3

局部 输入数组2 = {3, 4, -1, 1}
输出(缺少的首个正数(输入数组2))  -- 输出:2

局部 输入数组3 = {7, 8, 9, 11, 12}
输出(缺少的首个正数(输入数组3))  -- 输出:1

相关推荐

  1. 第一正数 - LeetCode 17

    2024-03-19 15:18:01       40 阅读
  2. 【LeetCode100】41. 第一正数(数组)

    2024-03-19 15:18:01       37 阅读
  3. 面试算法-49-第一正数

    2024-03-19 15:18:01       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-19 15:18:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-19 15:18:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-19 15:18:01       82 阅读
  4. Python语言-面向对象

    2024-03-19 15:18:01       91 阅读

热门阅读

  1. Pytorch nn.Module

    2024-03-19 15:18:01       47 阅读
  2. amazon linux 2023安装redis6

    2024-03-19 15:18:01       45 阅读
  3. C#异步运行任务

    2024-03-19 15:18:01       45 阅读
  4. 基于自然语言处理的情感分析系统

    2024-03-19 15:18:01       36 阅读
  5. Leetcode 389. Find the Difference

    2024-03-19 15:18:01       44 阅读
  6. Linux 常用指令

    2024-03-19 15:18:01       41 阅读
  7. 密码学——数字签名

    2024-03-19 15:18:01       37 阅读