628三个数的最大乘积

题目

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

思路

错误解法:
一开始看见时就想到用排序,因为排序完后我们就可以取到三个最大值,那么三个最大值相乘也就是最大乘积了,但是忽略了有负数的时候,负负相乘有可能会得到一个更大的数
正确解法
我们此时应考虑三种情况:

  • 全是负数->最大的三个数的乘积为最大值
  • 全是正数->最大的三个数的乘积为最大值
  • 有负数有正数->乘积最大值可能为最大的三个正数,也有可能是最大的一个正数和两个最小的负数(因为它们的绝对值最大)的乘积

代码

那么我们现在就可以很简单的写出以下代码:

var maximumProduct = function(nums) {
    
    
      //es6新特性:箭头函数
      let nums2 = nums.sort((a,b)=>a-b);
      const n = nums.length;
      return Math.max(nums[0] * nums[1] * nums[n - 1], nums[n - 1] * nums[n - 2] * nums[n - 3]);

复杂度

  • 时间复杂度:O(Nlog⁡N)O(N\log N)O(NlogN),其中 NNN 为数组长度。排序需要 O(Nlog⁡N)O(N\log N)O(NlogN) 的时间。
  • 空间复杂度:O(log⁡N)O(\log N)O(logN),主要为排序的空间开销。

猜你喜欢

转载自blog.csdn.net/weixin_42898315/article/details/112992534