题目:
给你一个整数数组 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) = 34 = 12 。
示例 2:
输入:nums = [1,5,4,5]
输出:16
解释:选择下标 i=1 和 j=3(下标从 0 开始),则可以获得最大值 (5-1)(5-1) = 16 。
C语言:
int maxProduct(int* nums, int numsSize)
{
int max=0, secmax = 0;
int i, j, m;
for(i=0;i<numsSize;i++)
{
if(max<nums[i])
{
max = nums[i];
m = i;
}
}
for(j=0;j<numsSize;j++)
{
if(secmax<nums[j] && m!=j)
secmax = nums[j];
}
return((max-1)*(secmax-1));
}
执行用时4ms,内存消耗5.8MB。
Python3:
class Solution:
def maxProduct(self, nums: List[int]) -> int:
nums.sort()
lens=len(nums)
ans=(nums[lens-1]-1)*(nums[lens-2]-1)
return ans
执行用时36ms,内存消耗15MB。