/*利用桶排序类似方法:用原数组nums[i-1]存i+1。然后遍历寻找第一个
未出现的数字。
参考自:https://github.com/soulmachine/leetcode*/
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
if(nums.empty()) return 1;
for(int i = 0; i < nums.size();){
if(nums[i] > 0 && nums[i] < nums.size()+1 && nums[i] != nums[nums[i]-1]){
swap(nums[i], nums[nums[i]-1]);
}
else ++i;
}
for(int i = 0; i < nums.size(); ++i){
if(nums[i] != i+1) return i+1;
}
return nums.size()+1;
}
};