Skip to content

Latest commit

 

History

History

1464.Maximum Product of Two Elements in an Array

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

English Version

题目描述

给你一个整数数组 nums,请你选择数组的两个不同下标 ij使 (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 。

示例 3:

输入:nums = [3,7]
输出:12

 

提示:

  • 2 <= nums.length <= 500
  • 1 <= nums[i] <= 10^3

解法

找出数组中最大的两个元素的下标 i、j,然后计算 (nums[i]-1)*(nums[j]-1) 即可。

Python3

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        i = 0 if nums[0] > nums[1] else 1
        j = 1 - i
        for k in range(2, len(nums)):
            if nums[k] > nums[i]:
                j = k
                i, j = j, i
            elif nums[k] > nums[j]:
                j = k
        return (nums[i] - 1) * (nums[j] - 1)

Java

class Solution {
    public int maxProduct(int[] nums) {
        int i = nums[0] > nums[1] ? 0 : 1;
        int j = 1 - i;
        for (int k = 2; k < nums.length; ++k) {
            if (nums[k] > nums[i]) {
                j = k;
                int t = i;
                i = j;
                j = t;
            } else if (nums[k] > nums[j]) {
                j = k;
            }
        }
        return (nums[i] - 1) * (nums[j] - 1);
    }
}

...