189. 丢失的第一个正整数
给出一个无序的整数数组,找出其中没有出现的最小正整数。
样例
样例 1:
输入:[1,2,0]
输出:3
样例 2:
输入:[3,4,-1,1]
输出:2
挑战
只允许时间复杂度O(
n
)的算法,并且只能使用常数级别的空间。
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] <= A.length && A[i] != A[A[i] - 1]) {
swap(A, A[i] - 1, i);
}
}
for (int i = 0; i < A.length; i++) {
if (A[i] != i + 1) {
return i + 1;
}
}
return A.length + 1;
}
private void swap(int[] A, int i, int j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
public class Solution {
/**
* @param A: An array of integers
* @return: An integer
*/
public int firstMissingPositive(int[] A) {
int result = 1;
for (int i = 0; i < A.length;i++ ) {
boolean has=false;
for (int j = i; j <A.length ; j++) {
if (A[j]==result){
A[j]=A[i];
has=true;
break;
}
}
if (has){
result++;
}else {
return result;
}
}
return result;
}
}
public class Solution {
/**
* @param A: An array of integers
* @return: An integer
*/
public int firstMissingPositive(int[] A) {
HashSet<Integer> hashSet = new HashSet<>();
for (int v : A ) {
hashSet.add(v);
}
int result = 1;
for (int i = 0; i < A.length; i++) {
if (hashSet.contains(result)){
result++;
}else {
return result;
}
}
return result;
}
}