1. int firstMissingPositive(vector<int>& nums) {
    2. int length = nums.size();
    3. if (length == 0)
    4. return 1;
    5. // 小心[1, 1]这种例子会造成死循环,要特殊处理。(nums[i] != nums[nums[i]-1)
    6. for(int i = 0; i < length; i++)
    7. while(nums[i] >= 1 && nums[i] <= length && nums[i] != i + 1 && nums[i] != nums[nums[i]-1])
    8. swap(nums[i], nums[nums[i]-1]);
    9. for(int i = 0; i < length; i++)
    10. if(nums[i] != i + 1)
    11. return i+1;
    12. return length + 1;
    13. }