简单
给你一个整型数组 nums
,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入:nums = [1,2,3]
输出:6
示例 2:
输入:nums = [1,2,3,4]
输出:24
示例 3:
输入:nums = [-1,-2,-3]
输出:-6
提示:
3 <= nums.length <= 104
-1000 <= nums[i] <= 1000
题解: 数组中的数只有三种可能 全为正数
全为负数
有正有负数
对于第一种
,排序后返回后三位
的乘积即可.判断条件为nums[0]>0
对于第二种
,排序后返回前三位
的乘积即可.判断条件为nums[n-1]<0
对于第三种
,前三位
和后三位
都有可能为最值(排序后),返回max(前三,后三)即可
但实际上前两种可能同样适用与第三种,因此为了使代码看上去更简洁我们只用第三种便可以解决问题
class Solution{
public:
int maximumProduct(vector<int>& nums){
if(nums.size()==3)
return nums[0]*nums[1]*nums[2];//只有三个数直接返回
sort(nums.begin(),nums.end());
int n = nums.size();
return max(nums[0]*nums[1]*nums[n-1],nums[n-3]*nums[n-2]*nums[n-1]);//第三种
}
};