Given an unsorted integer array `nums`, return the **smallest missing positive integer**.
You must implement an algorithm that runs in O(n) time and uses O(1) auxiliary space.
**Example 1:**
```
Input: nums = [1,2,0]
Output: 3
Explanation: The numbers in the range [1,2] are all in the array.
```
**Example 2:**
```
Input: nums = [3,4,-1,1]
Output: 2
```
**Example 3:**
```
Input: nums = [7,8,9,11,12]
Output: 1
```