Skip to content

Latest commit

 

History

History
101 lines (71 loc) · 2.5 KB

File metadata and controls

101 lines (71 loc) · 2.5 KB

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);
    }
}

...