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;
}

结果

相关推荐
QXWZ_IA4 小时前
1库1图1批是什么?千寻位置公安地图数据体系详解
科技·算法·能源·媒体·交通物流·政务
c238565 小时前
Bug 猎手入门指南
c++·算法·bug
Reart5 小时前
Leetcode 213.打家劫舍2(内含闲谈,打劫真是技术活,好题,716)
后端·算法
Reart6 小时前
Leetcode 198.打家劫舍(716)
后端·算法
Jerry6 小时前
LeetCode 110. 平衡二叉树
算法
玖玥拾7 小时前
C++ 数据结构 八大基础排序算法专题
数据结构·c++·算法·排序算法
Tim_107 小时前
【C++】017、new/delete与malloc/free的区别
java·数据结构·算法
从零开始的代码生活_7 小时前
C++ list 原理与实践:双向链表、迭代器与简化实现
开发语言·c++·后端·学习·算法·链表·list
ttod_qzstudio8 小时前
【软考算法】软件设计师下午第四题之动态规划:0-1 背包与最长公共子序列的“填表艺术“
算法·动态规划·软考