题目:
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入: [1,2,3]
输出: 6
示例 2:
输入: [1,2,3,4]
输出: 24
通过结果:
代码:
var maximumProduct = function(nums) {
let sum;//设置变量用来存放
let i=nums.length;
if(i==3){
sum=nums[0]*nums[1]*nums[2];
}else{
nums=nums.sort((a,b)=>a-b);
let arr1=nums[i-3]*nums[i-2]*nums[i-1];
let arr2=nums[0]*nums[1]*nums[i-1];
sum=Math.max(arr1,arr2)
}
return sum;
};
思路:
从题意来看,可以知道这道题数组里最少也有三个元素,所以我们可以选择分为两种情况,一种是数组内只有三个数据,直接输出三个数据的乘积即可。第二种情况是有多个数据,这时候我们就需要面对更多的情况了。
首先题目中没有提到数组内是升序排列,所以为了保险起见,我们还是对数组重新进行升序排列,最后取重新排序后数组的最后三位相乘即可得出最大值。但这里需要注意的是,题目中没有给出数组具体数值的范围,所以数组内的数值很可能含有负数,当含有负数时,三个数的最大乘积很可能不是数组最后三位相乘得到的结果。例如数组升序后得到[-4,-3,1,2,3,6],取最后三位得到的数值为36,而取第一、二和最后一位得到的数值为72,假如没有事先想到这种情况,直接返回36的话,就会得到错误的答案。
所以我们先设置一个变量用来存放数据乘积的值,然后对数组的长度进行分类,假如长度为3,直接输出三个元素的乘积,假如长度大于3,则分开情况讨论,此时数组的最大值有两种情况,一个是最后三位相乘,一个是第一位、二位和最后一位相乘,我们可以直接对两者进行比较,最后输出更大的数值即可。