内容
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 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);
}
};
网友评论