原地哈希 把nums[i] 映射到 nums[num[i] - 1]的位置
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
if(nums.size() == 1)
{
if(nums[0] == 1) return 2;
else return 1;
}
for(int i = 0; i < nums.size(); i++)
{
while(nums[i] > 0 && nums[i] <= nums.size() && nums[i] != nums[nums[i] - 1])
{
swap(nums[i], nums[nums[i] - 1]);
}
}
int cnt = 0;
for(const int &i : nums)
{
if(i != ++ cnt) return cnt;
}
return cnt + 1;
}
};