628. 三个数的最大乘积

内容

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

示例 1:

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

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

给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。


思路

首先从大到小排序

分四种情况,
如果没有正数,那么直接返回最大的三个数乘积
如果有一个整数,那么返回该正数和最小的两个负数的乘积
如果有两个正数,这时候肯定不能同时选这两个正数,不然剩下第三个数就是负数,那么结果就是负的,所以这里也只能选最大的正数和最小的两个负数
如果有三个正数,那么这里有两种情况,
三个正数和一个最大正数和两个最小负数,所以比较一下大小即可。


代码

/**
首先从大到小排序

分四种情况,
如果没有正数,那么直接返回最大的三个数乘积
如果有一个整数,那么返回该正数和最小的两个负数的乘积
如果有两个正数,这时候肯定不能同时选这两个正数,不然剩下第三个数就是负数,那么结果就是负的,所以这里也只能选最大的正数和最小的两个负数
如果有三个正数,那么这里有两种情况,
三个正数和一个最大正数和两个最小负数,所以比较一下大小即可。
 * @param {number[]} nums
 * @return {number}
 */
var maximumProduct = function (nums) {
    nums.sort(function (a, b) {
        return b - a;
    })

    var max1 = nums[0];
    var max2 = nums[1];
    var max3 = nums[2];

    if (max1 < 0) {
        return max1 * max2 * max3;
    } else if (max2 < 0) {
        return max1 * nums.pop() * nums.pop();
    } else if (max3 < 0) {
        return max1 * nums.pop() * nums.pop();
    } else {
        return Math.max(max1 * nums.pop() * nums.pop(), max1 * max2 * max3);
    }
};

回到目录

你可能感兴趣的:(628. 三个数的最大乘积)