Given an unsorted integer array, find the first missing positive integer.
Example
Given [1,2,0]
return 3
,
and [3,4,-1,1]
return 2
.
因为有时间复杂度的要求,所以不使用排序算法。这道题可以一次遍历,对每一个数字A[i],将其放到第A[i]-1个位置。需要注意两点,第一是
只考虑正数,所以对负数的位置可以不进行任何要求。第二是,如果有重复的数字,直接忽略即可,因为不影响查找丢失的最小正数。
public class Solution {
/**
* @param A: an array of integers
* @return: an integer
*/
public int firstMissingPositive(int[] A) {
for(int i = 0; i < A.length; i++) {
while(A[i] > 0 && A[i] != i + 1 && A[i] <= A.length) {
int tmp = A[A[i] - 1];
if(tmp == A[i]) break;
A[A[i] - 1] = A[i];
A[i] = tmp;
}
}
for(int i = 0; i < A.length; i++) {
if(A[i] != i + 1)
return i + 1;
}
return A.length + 1;
}
}