您的位置:首页 > 其它

41. First Missing Positive

2017-02-17 20:36 260 查看
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.

这个题是找到第一个缺失的正数,即找到1-n中缺失的正数,如果没有缺失则应该返回n+1

窃以为这个题的关键在于搞清楚当给定包含n个数的数组时,最小缺失的数必然在1-(n+1)

间产生,因为这个范围内的数才是潜在的最小缺失的正数。

结题思路参考http://www.cnblogs.com/AnnieKim/archive/2013/04/21/3034631.html



参考代码如下

class Solution {
public:
int firstMissingPositive(int A[], int n) {
int i = 0;
while (i < n)
{
if (A[i] != (i+1) && A[i] >= 1 && A[i] <= n && A[A[i]-1] != A[i])
swap(A[i], A[A[i]-1]);
else
i++;
}
for (i = 0; i < n; ++i)
if (A[i] != (i+1))
return i+1;
return n+1;
}
};


我的代码如下:

public class Solution {
public int firstMissingPositive(int[] nums) {

if(nums==null||nums.length==0)
return 1;
for(int i = 0;i < nums.length; i++)
if(nums[i]!=(i+1)&&nums[i]>=1&&nums[i]<=nums.length&&nums[nums[i]-1]!=nums[i]){
int temp = nums[i];
nums[i] = nums[temp-1];
nums[temp-1] = temp;
i--;
}
for(int i = 0;i < nums.length; i++)
if(nums[i]!=(i+1))
return i+1;
return (nums.length+1);
}
}


主要在于交换部分需要注意不要用nums[nums[i]-1]因为nums[i]的值会改变,而temp的值是不变的,所以用temp来替换nums[i],
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: