给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入:nums = [1,2,3]
输出:6
示例 2:
输入:nums = [1,2,3,4]
输出:24
示例 3:
输入:nums = [-1,-2,-3]
输出:-6
【思路】
常规思路三重循环超时
如果单纯排序取最大的三个数相乘,又会有负数的情况。
所以我是这样想的,首先取出三个最大的数相乘:作为zhengmax
然后如果有负数产生最大值,必然是负数的个数大于等于2,且最小的两个负数乘一个最大的正数,这个值称为fumax
最后比较zhengmax 和fumax谁大即可。
【代码】:
/**
* @param {number[]} nums
* @return {number}
*/
var maximumProduct = function(nums) {
nums.sort((a,b)=>b-a);
var cnt=0;
var zhengmax = nums[0]*nums[1]*nums[2];
for(let i = 0;i < nums.length;i++){
if(nums[i] < 0) cnt++;
}
if(cnt < 2){
return zhengmax;
}else{
var fumax = nums[nums.length - 1] * nums[nums.length - 2]*nums[0];
return fumax > zhengmax ? fumax : zhengmax;
}
};