给你一个整型数组 nums
,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
方法一:
class Solution {
public:
int maximumProduct(vector<int>& nums) {
int n = nums.size();
std::sort(nums.begin(), nums.end());
if(nums[n-1] <= 0 || nums[0] >= 0){
return nums[n-1]*nums[n-2]*nums[n-3];
}
if(nums[0] < 0 && nums[n-1] > 0){
if(nums[0]*nums[1] < nums[n-2]*nums[n-3]){
return nums[n-1]*nums[n-2]*nums[n-3];
}else{
return nums[0]*nums[1]*nums[n-1];
}
}
return 0;
}
};
解题思路:分成两部分,第一部分全为正数,或者全为负数。第二部分有正有负,主要考虑的就是最大的三个数和最小的两个数。
方法二:
class Solution {
public:
int maximumProduct(std::vector<int>& nums) {
// 对数组进行排序
std::sort(nums.begin(), nums.end());
int n = nums.size();
// 考虑所有元素均为正数或负数的情况
int product1 = nums[n - 1] * nums[n - 2] * nums[n - 3];
// 考虑有两个负数和一个正数的情况
// 因为数组已经排序,所以两个最小的负数位于数组的开头
int product2 = nums[0] * nums[1] * nums[n - 1];
// 返回两种情况中较大的乘积
return std::max(product1, product2);
}
};
解题思路:不用考虑分组情况,只要选择这两种情况大的一个就好。