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.
找出三个数使得乘积最大,实在不知道这题有啥好写的。。。
排序要O(nlogn)所以写了个O(n)的做法,不过确实感觉挺无聊的。。。
class Solution {
public:
int maximumProduct(vector<int>& nums) {
int n = nums.size();
int num1 = max(nums[0], max(nums[1], nums[2]));
int num3 = min(nums[0], min(nums[1], nums[2]));
int num2 = nums[0] + nums[1] + nums[2] - num1 - num3;
int mmin1 = num3;
int mmin2 = num2;
for (int i = 3; i < n; ++i) {
if (nums[i] > num1) {
num3 = num2;
num2 = num1;
num1 = nums[i];
}
else if (nums[i] > num2) {
num3 = num2;
num2 = nums[i];
}
else if (nums[i] > num3) {
num3 = nums[i];
}
if (nums[i] < mmin1) {
mmin2 = mmin1;
mmin1 = nums[i];
}
else if (nums[i] < mmin2) {
mmin2 = nums[i];
}
}
int ans = num1 * num2 * num3;
ans = max(ans, num1 * mmin1 * mmin2);
return ans;
}
};