【LeetCode热题100】【数组】缺失的第一个正数

题目链接:41. 缺失的第一个正数 - 力扣(LeetCode)

要找出这个数组里面没有出现的最小的正数,最小的正数是1,n个元素的数组能够让答案最大为n+1,也就是位置0对应1,位置1对应2......如果我们按照这样的对应关系重新整理一下数组,从0到n-1遍历,num[i]和i+1不相等的就是缺失的最小的正数

如何整理数组呢,找到范围在1到n之间的num[i],它正确的位置应该在num[i]-1,交换这两个的值

复制代码
class Solution {
public:
    int firstMissingPositive(vector<int> &nums) {
        int n = nums.size();
        for (int i = 0; i < n; ++i) {
            while (nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i] - 1])
                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;
    }
};
相关推荐
黑听人3 分钟前
【力扣 中等 C++】90. 子集 II
开发语言·数据结构·c++·算法·leetcode
黑听人28 分钟前
【力扣 简单 C】21. 合并两个有序链表
c语言·开发语言·数据结构·算法·leetcode
励志成为大佬的小杨1 小时前
时间序列基础
人工智能·算法
黑听人1 小时前
【力扣 简单 C】83. 删除排序链表中的重复元素
c语言·开发语言·数据结构·算法·leetcode
微凉的衣柜1 小时前
机器人导航中的高程图 vs 高度筛选障碍物点云投影 —— 如何高效处理避障问题?
算法·机器人
Shaun_青璇2 小时前
Cpp 知识3
开发语言·c++·算法
小鸡脚来咯2 小时前
ThreadLocal实现原理
java·开发语言·算法
编程绿豆侠2 小时前
力扣HOT100之技巧:75. 颜色分类
算法·leetcode·排序算法
程序员Xu2 小时前
大厂机试题解法笔记大纲+按知识点分类+算法编码训练
笔记·算法
DarkChunk3 小时前
[BUG]Cursor C++扩展不支持
算法