跳转至

41.缺失的第一个正数 (Hard)*

题目描述*

思路 & 代码*

首先对于长为 n 的数组,结果肯定是 [1, n + 1],所以我们就按照之前寻找重复元素的方法,交换元素到对应的下标,之后遍历就可以找到第一个缺失的数。交换要注意只处理 [1, n] 的元素即可。

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0; i < n; i++) {
            while(nums[i] >= 1 && nums[i] <= n && nums[nums[i] - 1] != nums[i]) {
                swap(nums[nums[i] - 1], nums[i]);
            }
        }
        for(int i = 0; i < n; i++) {
            if(nums[i] != i + 1) {
                return i + 1;
            }
        }
        return n + 1;
    }
};

最后更新: July 23, 2022