描述
描述
给定一个无重复元素的整数数组nums,请你找出其中没有出现的最小的正整数
要求: 空间复杂度 O(1),时间复杂度 O(n)
进阶:空间复杂度O(1),时间复杂度 O(logn)
分析
首先想到的是排序,但是负数和最小的正整数不在数组内两种情况不太好处理,所以在忽略要求的前提下可以使用hashmap,简单粗暴;
排序解法需要考虑负数和最小的正整数不在数组内两种情况。
hashmap解法
import java.util.*;
public class Solution {
public int minNumberDisappeared (int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for(int i : nums){
map.put(i,i);
}
int i = 1;
while(true){
if(!map.containsKey(i)){
break;
}
i++;
}
return i;
}
}
排序解法
import java.util.*;
public class Solution {
public int minNumberDisappeared (int[] nums) {
Arrays.sort(nums);
int i = 0, j = 1;
while(i < nums.length && nums[i] <= 0){
i++;
}
while(i < nums.length && nums[i] == j){
i++;
j++;
}
return j;
}
}