628-三个数的最大乘积
标签:数组 数学 排序
题目信息
题目地址: 628. 三个数的最大乘积
题目内容:
javascript
给你一个整型数组nums,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 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
题解
解法一
思路:
可以先对数组进行
从小到大排序
,然后会有两种情况当数组
全为正数或负数
时,最大的三个数乘积肯定是最大的。当数组中
既有正数也有负数
时,两个最小的负数
与最大的正数
的乘积可能会是最大的,也可能最大三个数的乘积是最大的
代码实现:
javascript
/**
* @param {number[]} nums
* @return {number}
*/
var maximumProduct = function(nums) {
nums.sort((a, b) => a - b)
const len = nums.length
return Math.max(
nums[len - 3] * nums[len - 2] * nums[len - 1],
nums[0] * nums[1] * nums[len - 1]
)
};
解法二
思路:
直接求出数组中
最大的三个数
和最小的两个数
代码实现:
javascript
/**
* @param {number[]} nums
* @return {number}
*/
var maximumProduct = function(nums) {
let max1 = -Infinity, max2 = -Infinity, max3 = -Infinity
let min1 = Infinity, min2 = Infinity
for(const num of nums) {
// 先求出最大的三个数
if(num > max1) {
max3 = max2
max2 = max1
max1 = num
}else if(num > max2) {
max3 = max2
max2 = num
}else if(num > max3) {
max3 = num
}
// 同理求出最小的两个数
if(num < min1) {
min2 = min1
min1 = num
}else if(num < min2) {
min2 = num
}
}
return Math.max(
max1 * max2 * max3,
max1 * min1 * min2
)
};