您的位置:首页 > 其它

41. First Missing Positive

2016-12-02 22:40 162 查看
problem:

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.

虽然不能再另外开辟非常数级的额外空间,但是可以在输入数组上就地进行swap操作。

思路:交换数组元素,使得数组中第i位存放数值(i+1)。最后遍历数组,寻找第一个不符合此要求的元素,返回其下标。整个过程需要遍历两次数组,复杂度为O(n)。
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int i = 0;
int result = 0;
while(i < nums.size())
{
if(nums[i] != i+1 && nums[i] >= 1 && nums[i] <= nums.size() && nums[nums[i]-1] != nums[i])
{
swap(nums[i], nums[nums[i]-1]);
}
else
i++;
}

int j=0;
for(; j<nums.size(); j++)
{
if(nums[j] != j+1)
{
result = j+1;
return result;
}

}

result = nums.size()+1;

return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: