给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
示例 3:
输入: [7,8,9,11,12]
输出: 1
提示:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间
package leetcode; import java.util.HashSet; import java.util.Set; public class FirstMissPositiveSolution { int firstMissPositive(int[] nums){ int len = nums.length; Set<Integer> hashSet = new HashSet<>(); for(int num : nums){ hashSet.add(num); } for(int i = 1 ;i < len ;i++){ if(! hashSet.contains(i)){ return i; } } return len+1 ; } public static void main(String[] args){ int[] nums={-1,1,2,4,0,3,58,1}; int result = new FirstMissShuSolution().firstMissShu(nums); System.out.println(result); } }
package leetcode; import java.util.Arrays; public class FirstMissShuSolution { int firstMissShu(int[] nums){ if(nums == null){ return 1; } Arrays.sort(nums); int compare = 0 ; for(int i=0 ;i < nums.length; i++){ if(nums[i] <= 0 ){ continue; } if(i > 0 && nums[i-1] == nums[i]){ continue; } compare++; if(compare < nums[i]){ return compare; } } return compare+1; } public static void main(String[] args){ int[] nums={0,-1,-2,2,3,4,5,6,78}; int n = new FirstMissShuSolution().firstMissShu(nums); System.out.println(n); } }