丢失的第一个正整数
问题描述
给出一个无序的整数数组,找出其中没有出现的最小正整数。
样例
样例1:
输入:[1,2,0]
输出:3
样例2:
输入:[3,4,-1,1]
输出:2
大致思路
类似于幼儿园排位置,把对应的数字排入对应的位置,之后在从头遍历一遍
数组,便可知道第一个丢失的正整数
Java代码
public class Solution {
/**
* @param A: An array of integers
* @return: An integer
*/
public int firstMissingPositive(int[] A) {
// write your code here
if (A == null)
return 1;
for(int i = 0;i<A.length; i++){
if(A[i]!= i){
int j = A[i];
while(j != i && j>=0 && j<A.length && A[j]!= j){
int temp = A[j];
A[j] = j;
j = temp;
}
A[i] =j;
}
}
int ans = 1;
while(ans<A.length && A[ans] == ans)
ans++;
if(ans == A.length && A[0]==ans) ans++; // 数组恰好是从1开始的升序数组,比如1,2,3,4,那么数组0号位置会存放4
return ans;
}
}