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.返回二者即可