每日一题:第474场周赛 Q1. 找出缺失的元素

Q1. 找出缺失的元素

给你一个整数数组 nums ,数组由若干 互不相同 的整数组成。

数组 nums 原本包含了某个范围内的 所有整数 。但现在,其中可能 缺失 部分整数。

该范围内的 最小 整数和 最大 整数仍然存在于 nums 中。

返回一个 有序 列表,包含该范围内缺失的所有整数,并 按从小到大排序。如果没有缺失的整数,返回一个  列表。

示例 1:

输入: nums = [1,4,2,5]

输出: [3]

解释:

最小整数为 1,最大整数为 5,因此完整的范围应为 [1,2,3,4,5]。其中只有 3 缺失。

示例 2:

输入: nums = [7,8,6,9]

输出: []

解释:

最小整数为 6,最大整数为 9,因此完整的范围为 [6,7,8,9]。所有整数均已存在,因此没有缺失的整数。

示例 3:

输入: nums = [5,1]

输出: [2,3,4]

解释:

最小整数为 1,最大整数为 5,因此完整的范围应为 [1,2,3,4,5]。缺失的整数为 2、3 和 4。

提示:

2 <= nums.length <= 100
1 <= nums[i] <= 100

题目链接

Q1题解:

点击查看代码

import java.util.*;
class Solution {
    public List<Integer> findMissingElements(int[] nums) {
        Arrays.sort(nums);
        List<Integer> res = new ArrayList<>();
        for (int i=0;i+1<nums.length;i++){
            while (nums[i]+1 != nums[i+1]){
                res.add(nums[i]+1);
                nums[i]+=1;
            }
        }
//        System.out.println(Arrays.toString(nums));
        return res;
    }
}

Q2. 一次替换后的三元素最大乘积

给你一个整数数组 nums

你 必须 将数组中的 恰好一个 元素替换为范围 [-10^5, 10^5](包含边界)内的 任意 整数。

在进行这一替换操作后,请确定从修改后的数组中选择 任意三个互不相同的下标 对应的元素所能得到的 最大乘积 。

返回一个整数,表示可以达到的 最大乘积 。

示例 1:

输入: nums = [-5,7,0]

输出: 3500000

解释:

用 -10^5 替换 0,可得数组 [-5, 7, -10^5],其乘积为 (-5) * 7 * (-10^5) = 3500000。最大乘积为 3500000。

示例 2:

输入: nums = [-4,-2,-1,-3]

输出: 1200000

解释:

有两种方法可以达到最大乘积:

[-4, -2, -3] → 将 -2 替换为 10^5 → 乘积为 (-4) * 10^5 * (-3) = 1200000。
[-4, -1, -3] → 将 -1 替换为 10^5 → 乘积为 (-4) * 10^5 * (-3) = 1200000。
最大乘积为 1200000。

示例 3:

输入: nums = [0,10,0]

输出: 0

解释:

无论将哪个元素替换为另一个整数,数组始终会包含 0。因此,三个元素的乘积始终为 0,最大乘积为 0。

题目链接

题解:

点击查看代码

class Solution {
    public long maxProduct(int[] nums) {
        int[] sortNums=Arrays.stream(nums).map(Math::abs).sorted().toArray();
        return 100000L * sortNums[sortNums.length-1] * sortNums[sortNums.length-2];
    }
}