0
点赞
收藏
分享

微信扫一扫

缺失的第一个正数

徐一村 2022-02-01 阅读 40
算法

题目描述:

 

前言:

方法一:哈希表

 

代码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 条评论