0628. 三个数的最大乘积【简单】
1. 📝 题目描述
给你一个整型数组 nums,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入:nums = [1,2,3]
输出:61
2
2
示例 2:
输入:nums = [1,2,3,4]
输出:241
2
2
示例 3:
输入:nums = [-1,-2,-3]
输出:-61
2
2
提示:
3 <= nums.length <= 10^4-1000 <= nums[i] <= 1000
2. 🎯 s.1 - 暴力解法
js
/**
* @param {number[]} nums
* @return {number}
*/
var maximumProduct = function (nums) {
// 对数组进行排序
nums.sort((a, b) => a - b)
const n = nums.length
// 最大乘积可能来自两种情况:
return Math.max(
nums[n - 1] * nums[n - 2] * nums[n - 3], // 1. 三个最大数
nums[0] * nums[1] * nums[n - 1] // 2. 两个最小数与最大数
)
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 思考的切入点有很多,比如可以从正数的个数来枚举:
- case 1
- nums 中没有正数 - 最大乘积由 3 个最大负数组成
- 最大的 3 个数相乘
- case 2
- nums 中只有一个正数 - 此时需要跟两个最小的负数组合
- 最大的数和最小的两个数相乘
- case 3
- nums 中有两个正数 - 此时需要找出大的正数和最小的两个负数组合
- 如果只有一个负数,那没得选……
- 最大的数和最小的两个数相乘
- case 4
- nums 中有 > 3 个正数 - 此时最大值有两种情况:
- 1、最大的 3 个正数相乘
- 2、最大的正数和最小的两个负数相乘
- 综合上述所有情况,可以得出以下结论:
- 最大乘积的组合只有两种情况:
- 【1】最大的 3 个数相乘
- 【2】最大的数和最小的两个数相乘