628. Maximum Product of Three Numbers*
https://leetcode.com/problems/maximum-product-of-three-numbers/
题目描述
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.
C++ 实现 1
注意考虑有负数的情况. O ( N log N ) O(N\log N) O(NlogN)
class Solution {
public:
int maximumProduct(vector<int>& nums) {
std::sort(nums.begin(), nums.end());
int n = nums.size();
return std::max(nums[0] * nums[1] * nums[n - 1],
nums[n - 3] * nums[n - 2] * nums[n - 1]);
}
};
C++ 实现 2
来自 LeetCode Submission. O ( N ) O(N) O(N)
class Solution {
public:
int maximumProduct(vector<int>& nums) {
//假设max1 > max2 > max3
int max1 = INT_MIN;
int max2 = INT_MIN;
int max3 = INT_MIN;
//假设min1 < min2
int min1 = INT_MAX;
int min2 = INT_MAX;
for (int a : nums) {
if (a > max1) {
max3 = max2;
max2 = max1;
max1 = a;
} else if (a > max2) {
max3 = max2;
max2 = a;
} else if (a > max3) {
max3 = a;
}
if (a < min1) {
min2 = min1;
min1 = a;
} else if (a < min2) {
min2 = a;
}
}
return max(min1 * min2 * max1, max1 * max2 * max3);
}
};