题目描述:
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入: [1,2,3]
输出: 6
示例 2:
输入: [1,2,3,4]
输出: 24
注意:
- 给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
- 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
解法:
class Solution {
public:
int maximumProduct(vector<int>& nums) {
vector<int> pos;
vector<int> neg;
vector<int> zeros;
for(int num : nums){
if(num > 0){
pos.push_back(num);
}else if(num < 0){
neg.push_back(num);
}else{
zeros.push_back(0);
}
}
sort(pos.begin(), pos.end());
sort(neg.begin(), neg.end());
int sz1 = pos.size();
int sz2 = neg.size();
if(sz1 == 0){
// no positive number
if(zeros.empty()){
return neg[sz2-3]*neg[sz2-2]*neg[sz2-1];
}else{
return 0;
}
}else if(sz1 == 1){
// one positive number
if(sz2 >= 2){
return neg[0]*neg[1]*pos[0];
}else{
return 0;
}
}else if(sz1 == 2){
if(zeros.empty()){
if(sz2 == 1){
return neg[0]*pos[0]*pos[1];
}else{
return neg[0]*neg[1]*pos[1];
}
}else{
if(sz2 <= 1){
return 0;
}else{
return neg[0]*neg[1]*pos[1];
}
}
}else{
if(sz2 <= 1){
return pos[sz1-3]*pos[sz1-2]*pos[sz1-1];
}else{
int val1 = pos[sz1-3]*pos[sz1-2]*pos[sz1-1];
int val2 = neg[0]*neg[1]*pos[sz1-1];
return max(val1, val2);
}
}
}
};