「算法」三个数的最大乘积 | 刷题打卡

311 阅读1分钟

一、题目描述:

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

原题链接 👉 628. 三个数的最大乘积

示例 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

二、思路分析:

思路1:排序

首先将数组排序。

如果数组中全是非负数,则排序后最大的三个数相乘即为最大乘积;如果全是非正数,则最大的三个数相乘同样也为最大乘积。

如果数组中有正数有负数,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的乘积。

综上,我们在给数组排序后,分别求出三个最大正数的乘积,以及两个最小负数与最大正数的乘积,二者之间的最大值即为所求答案。

三、完整代码:

思路1:

var maximumProduct = function(nums) {
    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*(*nlogn),n数组长度。排序的时间复杂度为nlogn。
  • 空间复杂度:O(logn)。

四、总结:

——

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情