给出一个无序的正数数组,找出其中没有出现的最小正整数。您在真实的面试中是否遇到过这个题?
Yes
样例
如果给出 [1,2,0], return 3 如果给出 [3,4,-1,1], return 2
挑战
只允许时间复杂度O(n)的算法,并且只能使用常数级别的空间。
标签 Expand
相关题目 Expand
解题思路:
当想到是否可以把数组中的元素放入“合适”的位置时,豁然开朗,例如将1放在0位置上,2放在1位置上。。。,最后变量数组,如果某个位置上的数不合适,则返回该位置上“合适”的数,也就是First
public class Solution {
/**
* @param A: an array of integers
* @return: an integer
*/
public int firstMissingPositive(int[] A) {
// write your code here
if(0==A.length||null==A) return 1;
for(int i=0;i<A.length;i++){
while(A[i]!=i+1){
if(A[i]>=A.length||A[i]<=0||A[i]==A[A[i]-1]){
break;
}
swap(A[i]-1,i, A);
}
}
for(int j=0;j<A.length;j++){
if(A[j]!=j+1){
return j+1;
}
}
return A.length+1;
}
public void swap(int l, int r, int[] A) {
int tmp = A[l];
A[l] = A[r];
A[r] = tmp;
}
}