628. Maximum Product of Three Numbers
Problem
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.
Implementation
class Solution {
public:
int maximumProduct(vector<int>& nums) {
int res = 0;
int len = nums.size();
if(len < 3)
return res;
else if(len == 3)
return nums[0]*nums[1]*nums[2];
res = INT_MIN;
sort(nums.begin(), nums.end());
int num_neg = 0;
int num_pos = 0;
bool has_zero = false;
for(int idx = 0; idx < len; idx++) {
if(nums[idx] < 0) {
num_neg++;
}
else if(nums[idx] > 0) {
num_pos = len - idx;
break;
}
else {
has_zero = true;
}
}
int choice1 = nums[len-1]*nums[len-2]*nums[len-3];
int choice2 = nums[0]*nums[1];
if(!num_neg || num_neg == 1) {
return choice1;
}
else {
return choice2*nums[len-1] > choice1?choice2*nums[len-1]:choice1;
}
// The above can be simplified with
// choice2*nums[len-1] > choice1?choice2*nums[len-1]:choice1;
/* Brute force will cause time exceed
for(int idx1 = 0; idx1 < len - 2; idx1++) {
for(int idx2 = idx1 + 1; idx2 < len - 1; idx2++) {
int inter1 = nums[idx1]*nums[idx2];
for(int idx3 = idx2 + 1; idx3 < len; idx3++) {
int tmp = inter1*nums[idx3];
if(tmp > res)
res = tmp;
}
}
}
*/
return res;
}
};