【LeetCode 41.】First Missing Positive

题目大意:

在一个无序数组里找出第一个没出现的正数。

思路:

关键点在于,这个数字一定是1 - n+1的一个数字。
可以用map标记,但是这样用了额外的空间。
还可以直接对数组操作,把在这个范围的数字都放到自己的对应位置,然后遍历数组,找到第一个不符合的位置。

代码:

代码1:

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size();
        map<int, int> mp;
        
        for (int num: nums) {
            if (num >= 1 && num <= n) {
                mp[num]++;
            }
        }
        
        int ans;
        for (int i=1; i<=n+1; ++i) {
            if (!mp[i]) {
                ans = i;
                break;
            }
        }
        return ans;
    }
};

代码2:

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

猜你喜欢

转载自blog.csdn.net/iCode_girl/article/details/93858494