41. First Missing Positive

 

原题

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

例如:给序列[1,2,0], 第三个位置上不是正数,那缺失的正数就是 3,

   给序列 [3,4,-1,1],先把正数放在对应的位置上之后。变成了[1,-1,3,4],第二个位置上不是2,而是-1,所以缺失的正数是2,即返回 2.

解决方法:

  把所有正数都放在自己正确的对应的位置上,然后再找出第一个对应元素不是正数的下标,那么这一下标就是First Missing Positive。

过程详细图示例

代码:

int firstMissingPositive(vector<int>& nums) {
        int i = 0;
        int n = nums.size();
        while (i < n)    //把每个数放在正确下表的位置。比如数3在第一个位置,就把它与第三个位置的元素置换,那么3就能放在第三个位置了,
        { 
            if (nums[i] != (i+1) && nums[i] >= 1 && nums[i] <= n && nums[nums[i]-1] != nums[i]) 
                swap(nums[i], nums[nums[i]-1]);
            else
                i++;
        }
        for (i = 0; i < n; ++i)  //找出第一个不是正数的元素的下标(即下标不等于它的元素值)
            if (nums[i] != (i+1))
                return i+1;
        return n+1;
    }
原文地址:https://www.cnblogs.com/hozhangel/p/7861732.html