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

本题使用编程语言: Java