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];
}
}
