题目描述
给你一个未排序的整数数组 nums
,请你找出其中没有出现的最小的正整数。
用例描述
示例 1:
输入:nums = [1,2,0]
输出:3
示例 2:
输入:nums = [3,4,-1,1]
输出:2
示例 3:
输入:nums = [7,8,9,11,12]
输出:1
提示:
1 <= nums.length <= 5 * 105
-231 <= nums[i] <= 231 - 1
解题思路
本题我们使用集合框架,来进行解题
首先我们排除所有无效数据,也就是 <= 0 的值,将其他有效数据去重后存入集合框架。
并取到最大值,用于后面做判断
因此 Set 是最符合我们场景的数据类型
在排除后,开始逐一判断缺少的最小正整数。总体来说还是一个比较简单的思路。
上代码参考
代码
class Solution {
public int firstMissingPositive(int[] nums) {
int max = Integer.MIN_VALUE;
Set<Integer> set = new HashSet<>();
// 去重,取最大值
for(int i:nums){
if(i>0){
max = Math.max(max, i);
set.add(i);
}
}
// 考虑没有正整数的情况
if(set.size() == 0){
return 1;
}
// 如果最大的数值等于长度,那么说明为饱和的状态,返回 max+1 即可
if(set.size() == max){
return max+1;
}
// 逐一判断
for(int i = 1;i<max;i++){
if(!set.contains(i)){
return i;
}
}
return 0;
}
}