# 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.

{% hint style="info" %}
試著把數字放到該放的位置上，nums\[i]應該要被放置在nums\[i] - 1的地方。第一個for loop把位置調整一次，第二個for loop從小到大掃描看哪個位置最早出現沒放好的數字。
{% endhint %}

```cpp
// 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;
}
```
