每周一题:三个数的最大乘积(已更新js)

题目:

给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例 1:

输入: [1,2,3]
输出: 6
示例 2:

输入: [1,2,3,4]
输出: 24

 

通过结果:

每周一题:三个数的最大乘积(已更新js)

代码:

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,则分开情况讨论,此时数组的最大值有两种情况,一个是最后三位相乘,一个是第一位、二位和最后一位相乘,我们可以直接对两者进行比较,最后输出更大的数值即可。

每周一题:三个数的最大乘积(已更新js)

上一篇:Ajax六


下一篇:tomcat错误:严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.modeler.BaseModelMBean.invoke Exception