桶排序,当nums[i]!=i+1时,交换nums[i]和nums[nums[i]-1]],这一步后nums[nums[i]-1]中就是正确的值。所以若存在i+1,最终会换到nums[i]。
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n=nums.size();
int i;
for(i=0;i<n;i++)
{
while(nums[i]!=i+1)
{
if(nums[i]<=0||nums[i]>n||nums[i]==nums[nums[i]-1])
break;
swap(nums[i],nums[nums[i]-1]);
}
}
for(i=0;i<n;i++)
{
if(nums[i]!=i+1)
return i+1;
}
return n+1;
}
};