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

两个数对 (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]) 之间的 乘积差 取到 最大值 。

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

参数限制:
4 <= nums.length <= 104
1 <= nums[i] <= 104

遍历一遍找出最大的两个数和最小的两个数,最大的两个数之积减去最小的两个数之积即为最大乘积差:

class Solution {
public:
    int maxProductDifference(vector<int>& nums) {
        if (nums.size() < 4) {
            return -1;
        }

        int min = 10000, biggerThanMin = 10000;
        int max = 0, smallerThanMax = 0;
        for (int num : nums) {
            if (num < biggerThanMin) {
                if (num < min) {
                    biggerThanMin = min;
                    min = num;
                } else {
                    biggerThanMin = num;
                }
            }

            if (num > smallerThanMax) {
                if (num > max) {
                    smallerThanMax = max;
                    max = num;
                } else {
                    smallerThanMax = num;
                }
            }
        }

        return smallerThanMax * max - biggerThanMin * min;
    }
};
posted @   epiphanyy  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示