您的位置:首页 > 其它

First Missing Positive

2016-02-22 13:55 281 查看
Given an unsorted integer array, find the first missing positive integer.

Have you met this question in a real interview? Yes

Example

Given [1,2,0] return 3,

and [3,4,-1,1] return 2.

Challenge

Your algorithm should run in O(n) time and uses constant space.

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

其实交换的条件就是3个:

1: A[i] is in the range;
2: A[i] > 0.
3: The target is different; (如果不判断这个,会造成死循环,因为你交换过来一个一样的值)
*/
if (A[i] != i + 1 && A[i] >= 1 && A[i] <= A.length && A[A[i] - 1] != A[i]) {
int tmp = A[A[i] - 1];
A[A[i] - 1] = A[i];
A[i] = tmp;
//交换
} else
i++;
}
for (i = 0; i < A.length; i++) {
if (A[i] != i + 1)
return i + 1;
}
return A.length + 1;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: