缺失的第一个正数

徐一村

关注

阅读 41

2022-02-01

题目描述:

 

前言:

方法一:哈希表

 

代码1: 

//哈希表时间复杂度O(n),空间复杂度O(1)
int firstMissingPositive(vector<int>& nums) {
    int n = nums.size();
    for (int& num : nums) {
        if (num <= 0) {
            num = n + 1;
        }
    }
    for (int i = 0; i < n; ++i) {
        int num = abs(nums[i]);
        if (num <= n) {
            nums[num - 1] = -abs(nums[num - 1]);
        }
    }
    for (int i = 0; i < n; ++i) {
        if (nums[i] > 0) {
            return i + 1;
        }
    }
    return n + 1;
}

方法二:置换

代码2:

int firstMissingPositive2(vector<int>& nums) {
    int n = nums.size();
    for (int i = 0; i < n; ++i) {
        while (nums[i] > 0 && 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;
}

 

精彩评论(0)

0 0 举报