41. First Missing Positive

Given an unsorted integer array, find the first missing positive integer.

For example, Given [1,2,0] return 3, and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.

先说明题目的意思,就是有一组数字,数字中有正有负,从中找出一个数字,这个加上这个数字,所有正数构成一串连续的数字。
第一想法就是将数组排序,找到使正数不连续的数字就是了,但不满足题目要求,

要满足题目的要求, 那么nums[i] = i + 1;那么将数字n放在index为n-1的位置即可。
class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size(); 
        for(int i = 0; i < n; i++){
            //将数组中大于0的元素放到正确的位置上,例如5放到nums[4]
            while(nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]){
                swap(nums[i], nums[nums[i] - 1]);
            }
        }
        for(int i = 0; i < n; i++){
            if(nums[i] != i + 1)
                return i+1;
        }

        return n +1;
    }
};

results matching ""

    No results matching ""