Leetcode220: First Missing Positive

来源:互联网 发布:磁盘恢复软件免费版 编辑:程序博客网 时间:2024/06/07 03:36

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.

要求常数空间和线性时间复杂度,那么排序和哈希表都不适用。

可以调整数组,使得第i个位置上的值为i+1,调整一次复杂度是O(n),然后再一次遍历O(n),找到第一个位置和值不对应的地方即是缺少的整数。

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



0 0
原创粉丝点击