题目描述
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
C++
class Solution {
public:
int maximumProduct(vector<int>& nums) {
//思路:用最大堆,找到最大的三个数,也可能两个最小值为负值和一个最大值相乘结果更大。这里,我麻烦了,先最大堆,再最小堆
int a[3];
int b[3];
make_heap(nums.begin(),nums.end(),less<int>());
for(int i =0;i<3;i++){
pop_heap(nums.begin(),nums.end(),less<int>());
a[i]=nums.back();
nums.pop_back();
}
//恢复原向量
nums.push_back(a[0]);
nums.push_back(a[1]);
nums.push_back(a[2]);
//构造小堆
make_heap(nums.begin(),nums.end(),greater<int>());
for(int i =0;i<3;i++){
pop_heap(nums.begin(),nums.end(),greater<int>());
b[i]=nums.back();
nums.pop_back();
}
//三数相乘的最大值只有两种构造:1.连个最小值为负值乘以最大值 2.前三大的数相乘
int m=b[0]*b[1]*a[0];
int n=a[0]*a[1]*a[2];
return m>n? m:n;
}
};
总的来说我这里的思路就是直接找最大的三个数和最小的两个数;
还可以提前执行一个排序操作,再找最值。