您的位置:首页 > 其它

Leetcode220: First Missing Positive

2016-01-07 16:44 323 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: