1464. 数组中两元素的最大乘积 - 力扣(LeetCode) (leetcode-cn.com)
首先放上运行结果:
以下为正文:
思考
问:从一个数组中找出一个最大的元素的最快方法是什么?
答:因为数组中每个元素都有可能是最大的,因此要找出一个最大的至少要把每个元素检查一遍,时间复杂度至少是 n.
问:那么,找出最大元素之后接着再找出第二大元素的最快方法是什么?是不是 2*n?
答:不是,找出最大元素的过程基本都是相似的,因此找第二大元素时如果能借助找最大元素的过程,就能省去部分重复的操作,时间复杂度会在2*n以内.
代码
#define NOP 0
class Solution {
public:
int maxProduct(vector<int>& nums) {
int m[] = { nums[0], nums[1] };
m[0] > m[1] ? qswap(m[0], m[1]) : NOP;
int size = nums.size();
for (int i = 2; i != size; ++i) {
nums[i] > m[0] ? rectify(m, nums[i]) : NOP;
}
return (m[0] - 1) * (m[1] - 1);
}
int rectify(int* minHeap, int intruder) {
minHeap[0] = intruder;
return minHeap[1] < minHeap[0] ? qswap(minHeap[0], minHeap[1]) : NOP;
}
int qswap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
return NOP;
}
};