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的数组应该包含的正整数是1-n. 而数组的index为0-n-1。 所以我们可以将数为i的数移到i-1的位置上。这样,第一个A[i-1] != i的数,就是我们要找的first missing positive
注意:当我们移动数i到i-1的位置上时,要考虑到i必须在1-n之间,并且i-1位置原有的数不为i
public int firstMissingPositive(int[] A) { for(int i = 0 ; i < A.length; i++){ while(A[i] > 0 && 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; } } int i = 1; while (i <= A.length && A[i-1] == i){ i++; } return i; }
No comments:
Post a Comment