import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型一维数组
*/
public int[] findMissingAndMaxNegative (int[] nums) {
HashSet<Integer> set = new HashSet<>();
// 最小正数,最大负数
int positive = 0, negative = Integer.MIN_VALUE;
for (int i : nums) {
// 如果大于等于0那么就加入到set中,自动去重
if (i >= 0) {
set.add(i);
} else {
// 小于0,就和negative比较,找最大负数
negative = Math.max(negative, i);
}
}
// 如果是初始值,说明没找到负数,赋值为0
if (negative == Integer.MIN_VALUE) {
negative = 0;
}
// 从1开始寻找,从set里面开始contains判断,contains方法的时间复杂度是O(1)
while (set.contains(positive + 1)) {
positive++;
}
// 返回set中有的最小整数,然后题目要求的没有出现的,因此+1即可,负数不用做处理
return new int[] {positive + 1, negative};
}
}
本题知识点分析:
1.数学遍历和取值
2.哈希表去重
3.数学模拟
本题解题思路分析:
1.利用hashSet去重
2.进行遍历同时,可以找出最大的负数
3.如果没有找到负数,赋值为0
4.用contains方法从1开始判断,寻找出现过的最大正整数
5.出现过的最大正整数+1,就是未出现的最小正整数
6.返回二者即可

京公网安备 11010502036488号