LeetCode 41. First Missing Positive

必须利用原数组进行操作,第一想到的就是利用元素的对应下标,把nums[i]-1下标的元素*-1来做。但是由于0存在,所以不行。

可以利用while循环,把当前位置符合要求的元素swap到正确的位置,最后只要遍历nums,如果 i 下标的数不为 i+1,说明 i+1就是答案。如果没有这样的数,那么答案就是 nums.size()+1。

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

 

posted @ 2018-09-06 03:47  約束の空  阅读(92)  评论(0)    收藏  举报