1. 程式人生 > >41. First Missing Positive 第一個不在的正整數

41. First Missing Positive 第一個不在的正整數

Given an unsorted integer array, find the first missing positive integer.

For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.

1. 思路:

就是把【1,n】範圍內的數歸位,nums陣列中大於n的、或者小於等於0的數都不用管

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[nums[i]-1] != nums[i]) //只有在【1,n】範圍中的數會歸位
                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;
    }
};