First Missing Positive

因为是要找到正数,所以0可以不用管,使原序列调整到序号为i的元素值为i+1,非正数或者大于这个范围的数就不管它。

这样正确的数就会归位,错误的数直接一次遍历就能找到。

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        if(nums.size()==0) return 1;
        for(int i=0;i<nums.size();i++)
       {
           while(nums[i]!=i+1){
           if(nums[i]<=0||nums[i]>=nums.size()||nums[i]==nums[nums[i]-1])
           break;
           else swap(nums[i],nums[nums[i]-1]);
           }
           
       }
       for(int j=0;j<nums.size();j++)
       if(nums[j]!=j+1) return j+1;
       return nums.size()+1;
    }
    
};

 

posted on 2016-03-15 09:48  RenewDo  阅读(104)  评论(0编辑  收藏  举报

导航