题目:
Given an integer array, find three numbers whose product is maximum and output the maximum product.
Example 1:
Input: [1,2,3] Output: 6
Example 2:
Input: [1,2,3,4] Output: 24
Note:
- The length of the given array will be in range [3,104] and all elements are in the range [-1000, 1000].
- Multiplication of any three numbers in the input won't exceed the range of 32-bit signed integer.
分析:
想的有点复杂了,想着把正数(包括0)负数分开,如果正数个数大于等于3并且负数个数小于等于2的时候,就要比较三个正数和一个正数+两个负数的乘积,然后根据正数的个数分情况讨论。其实,没那么复杂。
我的代码:
class Solution {
public:
int maximumProduct(vector<int>& nums) {
vector<int> pos;
vector<int> neg;
for(int i =0; i<nums.size();i++){
if(nums[i]>=0){
pos.push_back(nums[i]);
}else{
neg.push_back(abs(nums[i]));
}
}
//printf("%d\n",neg[0]);
sort(pos.rbegin(),pos.rend());
sort(neg.rbegin(),neg.rend());
int maxV = 0;
if(nums.size()==3){
maxV = nums[0]*nums[1]*nums[2];
}
else if(pos.size()>= 3 && neg.size()>=2){
int m1 = pos[0]*pos[1]*pos[2];
int m2 = pos[0]*neg[0]*neg[1];
maxV = max(m1,m2);
}else if(pos.size()>=3){
maxV = pos[0]*pos[1]*pos[2];
}
else if(pos.size()<3 && pos.size()>0){
//printf("%s\n",'yes');
maxV = pos[0]*neg[0]*neg[1];
}else if(pos.size()==0){
int n = neg.size();
maxV = -neg[n-1]*neg[n-2]*neg[n-3];
}
return maxV;
}
};
网上的代码:(http://www.cnblogs.com/grandyang/p/7084957.html)
class Solution {
public:
int maximumProduct(vector<int>& nums) {
int n = nums.size();
sort(nums.begin(), nums.end());
int p = nums[0] * nums[1] * nums[n - 1];
return max(p, nums[n - 1] * nums[n - 2] * nums[n - 3]);
}
};