LeetCode Hot100 之 41 缺失的第一个正数

题目

思路

如果要用O(N) O(N)的话就比较简单,罐存储后从小到大遍历就行了。代码略。

如果要符合题目要求的O(N) O(1)的话,还是看了视频讲解,原来是把下标作为天然的哈希标签去做,每个i-1的位置应该放的是i,如果不是,就试图将现在的这个位置上的数字与该在这个位置上的数字交换(可能存在需要多次交换的情况,所以后续代码这一部分是用的while循环而不是一次if)。在原地交换完成后,对这个尽可能有序的数组进行历,如果哪一个位置的数字不满足numsi==numsnums\[i-1],那么这个数字就是缺失的第一个正整数。下面这位的解释很通俗易懂,可以搭配这个视频一起看

代码

cpp 复制代码
int firstMissingPositive(vector<int>& nums) {
    int n = nums.size();
    for (int i = 0; i < n; i++) {
        while (nums[i] >= 1 && nums[i] <= n && nums[i] != nums[nums[i] - 1]) {//因为 swap 之后位置 i 的元素变成新值,这个新值可能还需要继续交换
            swap(nums[i], nums[nums[i] - 1]);
        }
    }
    for (int i = 0; i < n; i++) {
        if (nums[i] != i + 1) {
            return i + 1;
        }
    }
    return n + 1;
}

结果

相关推荐
其实防守也摸鱼5 分钟前
Codex 下载与本地部署实战指南
linux·服务器·前端·数据库·算法·ai
南极企鹅7 分钟前
生产环境gc文件分析
java·jvm·算法
希洛兔9 分钟前
原码、反码、补码:一张图讲透计算机里的负数表示
算法·面试
X北辰北12 分钟前
C++ 进阶第二阶段总结|STL容器全家桶、迭代器失效、STL算法、序列化入门(工程必备)
开发语言·c++·算法
溪语流沙16 分钟前
面试加分项!Manacher:O(n)求最长回文子串的对称之美
java·python·leetcode·面试·职场和发展
过河卒_zh156676620 分钟前
再更新!人工智能安全治理指引性文件第三版发布!
人工智能·算法·aigc·生成式人工智能·算法备案
Web3&Basketball41 分钟前
昇腾950DT迁移实测:3笔成本账与决策树
服务器·算法·决策树
康实训1 小时前
老年人能力评估实训室核心实训环节解析
人工智能·算法·实训室·实训室建设
强哥聊算力6 小时前
《算力江湖·英伟达传奇》第七集:ChatGPT出现前夜,英伟达发生了什么?
服务器·人工智能·算法·ai·chatgpt·gpu算力
西柚小萌新9 小时前
【岗位面试】--成都博维数孪 - 工业 AI 解决方案顾问
人工智能·面试·职场和发展