Given an unsorted integer array, find the first missing positive integer.
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,缺失某个非1正数。
public class Solution {
public int firstMissingPositive(int[] nums) {
Set<Integer> set = new TreeSet();
for(int i = 0;i<nums.length;i++){
if(nums[i]>0)
set.add(nums[i]);
}
Object[] arr = set.toArray();
int i = 0;
if(arr.length<1 || (int)arr[0]!=1)
return 1;
for(;i<(arr.length-1);i++){
if(((int)arr[i]+1)<(int)arr[i+1]){
break;
}
}
return((int)arr[i]+1);
}
}
下面是高手用BitSet实现的算法
public static int firstMissingPositive(int[] nums) {
BitSet set = new BitSet();
for(int i = 0; i < nums.length; i++){
if(nums[i] >= 0){
set.set(nums[i]);
}
}
return set.nextClearBit(1);
}