41. First Missing Positive

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

Example 1:

Input: [1,2,0]
Output: 3

Example 2:

Input: [3,4,-1,1]
Output: 2

Example 3:

Input: [7,8,9,11,12]
Output: 1

Note:

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

試著把數字放到該放的位置上,nums[i]應該要被放置在nums[i] - 1的地方。第一個for loop把位置調整一次,第二個for loop從小到大掃描看哪個位置最早出現沒放好的數字。

// Two Pass Method
int firstMissingPositive(vector<int>& nums) { // time: O(n); space: O(1)
    int n = nums.size();
    // Put the number to the right place: nums[i] should be place at position = nums[i] - 1
    for (int i = 0; i < n; ++i) {
        while (nums[i] >= 1 && nums[i] <= n && nums[i] != nums[nums[i] - 1])
            swap(nums[i], nums[nums[i] - 1]);
    }
    for (int i = 0; i < n; ++i) {
        if (nums[i] != i + 1) return i + 1;
    }
    return n + 1;
}

Last updated

Was this helpful?