【LeetCode】628. Maximum Product of Three Numbers

Given an integer array,find three numbers whose product is maximum and output the maximum product.

Example 1:
Input: [1,2,3]
Output: 6

Example 2:
Input: [1,2,3,4]
Output: 24

Note:
1. The length of the given array will be in range [3,104] and all elements are in the range [-1000, 1000].
2. Multiplication of any three numbers in the input won’t exceed the range of 32-bit signed integer.

题目:
假设有一个整数数组,找到三个数,它们的乘积是最大值,输出最大值。

分析:
首先,我想到的是,既然乘积要大,那么乘数也要大,所以,用sort()方法将数组中的数按从小到大的顺序排列,然后取最大的三个数相乘。
但是,这里忽略了两个负数相乘也是正数的情况。
接下来,对正负数进行判断分析,
如果整个数组的数都是正数或者都是负数,那么,最大乘积一定是最后三个数相乘的结果,
如果只有最后一个数或最后两个数是正数,那么,最大乘积可能是最后一个数和最前面两个数相乘的结果,
由此可以发现,
在这个按从小到大排序后的数组中,我们只需要考虑三种可能:
一种是最前面的三个数相乘,
一种是最后面三个数相乘,
一种是最后面一个数和最前面两个数相乘,
比较三种可能得到的乘积结果,其中的最大值即为所求。

/**
 * @param {number[]} nums
 * @return {number} product
 */
var maximumProduct = function(nums) {
    nums.sort( (x,y) => (x-y) );
    var product = nums[0] * nums[1] * nums[2];
    product = Math.max(product, nums[nums.length-1] * nums[nums.length-2] * nums[nums.length-3]);
    product = Math.max(product, nums[nums.length-1] * nums[0] * nums[1]);
    return product;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值