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