题目描述
给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。
请你计算并返回该式的最大值。
示例 1:
输入:nums = [3,4,5,2]
输出:12
解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)(nums[2]-1) = (4-1)(5-1) = 3*4 = 12 。
示例 2:
输入:nums = [1,5,4,5]
输出:16
解释:选择下标 i=1 和 j=3(下标从 0 开始),则可以获得最大值 (5-1)*(5-1) = 16 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-product-of-two-elements-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
本人解题思路
笨方法,循环嵌套计算
class Solution {
public int maxProduct(int[] nums) {
int max = 0;
for (int i =0 ; i< nums.length-1; i++) {
int m = nums[i]-1;
// 计算,cas
for (int j = nums.length-1; j > i; j--) {
if (i == j) {
continue;
}
int n = nums[j]-1;
max = m*n > max ? m*n : max;
}
}
return max;
}
}
网友解题思路
// 1、将数组排序,然后取出最后两个
// 2、循环找出最大的数和第二大的树
// 解法1
class Solution {
public int maxProduct(int[] nums) {
Arrays.sort(nums);
return (nums[nums.length-1] -1) * (nums[nums.length-2]-1);
}
}
// 解法2
class Solution {
public int maxProduct(int[] nums) {
// 找出最大的两个数
int max = 0, secondMax = 0;
for(int i=0; i< nums.length; i++) {
if (nums[i] > max) {
secondMax = max;
max = nums[i];
} else if (nums[i] > secondMax) {
secondMax = nums[i];
}
}
return (max-1) * (secondMax-1);
}
}