题目描述
给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。
请你计算并返回该式的最大值。
示例 1
输入:
nums = [3,4,5,2]输出:
12解释: 选择下标
i=1和j=2(下标从 0 开始),可以获得最大值(4-1)*(5-1) = 3*4 = 12。
示例 2
输入:
nums = [1,5,4,5]输出:
16解释: 选择下标
i=1和j=3,可以获得最大值(5-1)*(5-1) = 16。
示例 3
输入:
nums = [3,7]输出:
12
提示
2 <= nums.length <= 5001 <= nums[i] <= 10^3
苯人思路
cpp
class Solution {
public:
int maxProduct(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size();
// 输出 最大两个数-1后的乘积 和最小两个数-1后的乘积 中较大的那个
// 此处考虑了 nums 元素为负数的情况
return ((nums[n-1]-1)*(nums[n-2]-1)>(nums[0]-1)*(nums[1]-1))?(nums[n-1]-1)*(nums[n-2]-1):(nums[0]-1)*(nums[1]-1);
}
};