LeetCode 1913. 两个数对之间的最大乘积差

简介: 两个数对 (a, b) 和 (c, d) 之间的 乘积差 定义为 (a * b) - (c * d) 。

网络异常,图片无法展示
|


题目


两个数对 (a, b) 和 (c, d) 之间的 乘积差 定义为 (a * b) - (c * d) 。


例如,(5, 6) 和 (2, 7) 之间的乘积差是 (5 * 6) - (2 * 7) = 16 。 给你一个整数数组 nums ,选出四个 不同的 下标 w、x、y 和 z ,使数对 (nums[w], nums[x]) 和 (nums[y], nums[z]) 之间的 乘积差 取到 最大值 。


返回以这种方式取得的乘积差中的 最大值 。

 

示例 1:
输入:nums = [5,6,2,7,4]
输出:34
解释:可以选出下标为 1 和 3 的元素构成第一个数对 (6, 7) 以及下标 2 和 4 构成第二个数对 (2, 4)
乘积差是 (6 * 7) - (2 * 4) = 34
示例 2:
输入:nums = [4,2,5,9,7,4,8]
输出:64
解释:可以选出下标为 3 和 6 的元素构成第一个数对 (9, 8) 以及下标 1 和 5 构成第二个数对 (2, 4)
乘积差是 (9 * 8) - (2 * 4) = 64


提示:


4 <= nums.length <= 104 1 <= nums[i] <= 104

解题思路


class Solution:
    def maxProductDifference(self, nums: List[int]) -> int:
        nums.sort()
        # print(nums)
        res = (nums[-1]*nums[-2] - nums[0]*nums[1])
        return res
if __name__ == '__main__':
    nums = [4,2,5,9,7,4,8]
    ret = Solution().maxProductDifference(nums)
    print(ret)
目录
相关文章
|
8月前
|
Go
golang力扣leetcode 713.乘积小于K的子数组
golang力扣leetcode 713.乘积小于K的子数组
48 0
|
8月前
|
Go
golang力扣leetcode 238.除自身以外数组的乘积
golang力扣leetcode 238.除自身以外数组的乘积
46 0
|
8月前
|
Go
golang力扣leetcode 152.乘积最大子数组
golang力扣leetcode 152.乘积最大子数组
75 0
|
8月前
|
Go
golang力扣leetcode 479.最大回文数乘积
golang力扣leetcode 479.最大回文数乘积
46 0
|
8月前
|
算法 测试技术 vr&ar
☆打卡算法☆LeetCode 152. 乘积最大子数组 算法解析
☆打卡算法☆LeetCode 152. 乘积最大子数组 算法解析
|
5月前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
41 0
|
5月前
|
Python
【Leetcode刷题Python】318. 最大单词长度乘积
本文提供了LeetCode题目318的Python编程解决方案,题目要求在一个字符串数组中找出两个不含有公共字母的单词,且这两个单词的长度乘积最大,如果不存在这样的两个单词,则返回0。
22 0
|
8月前
DAY-4 | 力扣 - 求自身以外数组的乘积:区间划分,左右累乘,巧求乘积
该文档是关于LeetCode上的一道题目“Product of Array Except Self”的题解。提供了两种解题方法,一是暴力破解,即计算所有数的乘积后再逐个除以当前元素;二是左右累乘法,通过两次遍历数组分别计算左侧和右侧元素的乘积,避免了除法操作。其中,左右累乘法更优,代码实现中展示了这种方法。
56 1
|
7月前
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
|
8月前
【力扣】238. 除自身以外数组的乘积
【力扣】238. 除自身以外数组的乘积