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 @ 2021-07-04 22:54  epiphanyy  阅读(19)  评论(0)    收藏  举报  来源