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

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

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

如何整理数组呢,找到范围在1到n之间的numi,它正确的位置应该在numi-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;
    }
};
相关推荐
c2385615 小时前
vector(下)
数据结构·算法
z落落15 小时前
C# 冒泡排序+选择排序 + Array.Sort 自定义排序
数据结构·算法
wyy1851007372815 小时前
双路并行:一套匹配算法如何解决中文制单的两大核心难题
算法·ai·crm·crm系统
s_w.h15 小时前
【 linux 】文件系统
linux·运维·服务器·算法·bash
无限进步_15 小时前
【C++】weak_ptr、循环引用与线程安全
开发语言·数据结构·c++·算法·安全
罗超驿15 小时前
9.LeetCode 209. 长度最小的子数组 | 滑动窗口专题详解
java·算法·leetcode·面试
水蓝烟雨15 小时前
0135. 分发糖果
算法·leetcode
IronMurphy15 小时前
【算法五十二】5. 最长回文子串
算法
Lewiis16 小时前
白话选择排序
数据结构·算法·排序算法
计算机安禾16 小时前
【算法分析与设计】第19篇:二分图匹配与指派问题
大数据·人工智能·算法