携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情
周五啦~大家起飞,今天周五不工作
数组中两元素的最大乘积
该题出自力扣的1464题 —— 数组中两元素的最大乘积【简单题】
审题
给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。
- 请你计算并返回该式的最大值。
-
该题的题意并不困难,只是相对有点拗口,实质上就是给出一个整数数组,找出数组的最大值和第二值,按照原题的公式就是找出乘积最大,那么乘积与元素的大小是线性关系的,因此目的就是找出最大值和最小值
-
因此可以衍生出两种解法
- 排序后输出
- 直接使用Arrays.sort方法,对数据进行排序,排序后输出后两位的乘积
- 第二种就是维护数组的最大位和次大位
- 先对数组的第一位和第二位进行大小比较并且对换位置
- 在对数组从下标第三位进行遍历,维护第一和第二位的最大数据
- 最后输出最大的第一和第二即可
- 排序后输出
-
因为我们只需要得到数组中两个最大的元素,我们可以在从左到右遍历的过程中维护两个变量 a,ba,b 来表示遍历过程中的最大和次大元素,那么一次遍历就可以得到数组中两个最大的元素。
编码
class Solution {
public int maxProduct(int[] nums) {
Arrays.sort(nums);
int len = nums.length -1;
return (nums[len] -1) * (nums[len -1] -1);
}
}
class Solution {
public int maxProduct(int[] nums) {
int a = nums[0], b = nums[1];
if (a < b) {
int temp = a;
a = b;
b = temp;
}
for (int i = 2; i < nums.length; i++) {
if (nums[i] > a) {
b = a;
a = nums[i];
} else if (nums[i] > b) {
b = nums[i];
}
}
return (a - 1) * (b - 1);
}
}