import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型一维数组
     */
    public int[] findMissingAndMaxNegative (int[] nums) {
        // write code here
        Arrays.sort(nums);
        int[] ans = new int[2];
        ans[1] = Integer.MIN_VALUE;
        boolean flag1 = false;
        boolean flag2 = false;

        for (int i = 0; i < nums.length; ++i) {
            if (nums[i] < 0) {
                ans[1] = Math.max(ans[1], nums[i]); // 可优化
                flag1 = true;
            } else {
                if (i > 0 && nums[i - 1] > 0 && nums[i] != nums[i - 1] + 1 &&
                        nums[i] != nums[i - 1]) {
                    ans[0] = nums[i - 1] + 1;
                    flag2 = true;
                    break;
                } else if (((i > 0 && nums[i - 1] < 0) || i == 0) && nums[i] != 0 &&
                           nums[i] != 1) {
                    ans[0] = 1;
                    flag2 = true;
                    break;
                }
            }
        }

        if (flag1 == false) {
            ans[1] = 0;
        }

        if (flag2 == false) {
            ans[0] = nums[nums.length - 1] >= 0 ? nums[nums.length - 1] + 1 : 1;
        }

        return ans;
    }
}

所使用的语言是Java。

这道题考察了以下知识点:

  1. 数组排序:使用Arrays.sort(nums)对数组进行排序,将数组元素按升序排列。
  2. 条件判断和循环控制:使用if-else语句和for循环遍历数组,并根据特定条件执行相应的操作。
  3. 数组访问和赋值:使用nums[i]来访问数组的第i个元素,并使用ans[0]ans[1]来分别访问和赋值结果数组的第一个和第二个元素。

代码的文字解释如下:

  1. 使用Arrays.sort(nums)对给定的整数数组nums进行升序排序。
  2. 创建一个大小为2的整数数组ans,并将所有元素初始化为0。ans[0]表示缺失的正整数,ans[1]表示最大的负整数。
  3. 设置两个布尔变量flag1flag2,初始化为false,用于标记是否找到了缺失的正整数和最大的负整数。
  4. 使用for循环遍历排序后的数组nums:如果当前数字小于0,更新ans[1]为当前数字和ans[1]中的较大值,并将flag1设置为true,表示找到了负整数。否则,根据一定的条件判断缺失的正整数:如果前一个数字大于0,并且当前数字不等于前一个数字加1且不等于前一个数字,表示前一个数字和当前数字之间存在缺失,则将ans[0]设置为前一个数字加1,并将flag2设置为true,表示找到了缺失的正整数。如果前一个数字小于0(或当前数字为数组的第一个元素),并且当前数字不等于0且不等于1,表示数组中缺失了1,将ans[0]设置为1,并将flag2设置为true。
  5. 根据flag1flag2的值判断是否需要对结果数组进行修正:如果flag1为false,表示未找到负整数,则将ans[1]设置为0。如果flag2为false,表示未找到缺失的正整数,则将ans[0]设置为数组中最后一个元素+1(如果最后一个元素大于等于0)或者1(如果最后一个元素小于0)。
  6. 返回结果数组ans作为答案。