题目描述
题目链接:
https://leetcode-cn.com/problems/maximum-product-of-three-numbers/
解题思路、
毫无疑问,肯定先对nums
进行排序,直接用sorted
即可,之后nums
就是按升序排序后的列表。接下来考虑以下三种情况:
- 列表中全为正数,此时最大乘积等于最大的三个正数相乘,即
nums[-1]*nums[-2]*nums[-3]
(从列表尾部开始数三个数
如[1, 2, 3, 4]
取2 * 3 * 4
- 列表中全为负数,此时最大乘积等于最大的三个负数相乘,即
nums[-1]*nums[-2]*nums[-3]
(从列表尾部开始数三个数)
如[-4, -3, -2, -1]
取-3*-2*-1
- 列表中既有负数,又有正数,那么最大乘积等于最小的两个负数相乘以后再乘以最大的正数或者最大的三个正数的乘积,即
nums[0]*nums[1]*nums[-1]
(列表首部取两个,尾部取一个),或nums[-1]*nums[-2]*nums[-3]
(从列表尾部开始数三个数)
如[-4,-3,1,2]
取-4*-3*2
如[-4,1,2,3]
取3*2*1
综上所述,针对排序后的列表,最大乘积要么是nums[-1]*nums[-2]*nums[-3]
,要么是nums[0]*nums[1]*nums[-1]
,根据第三种情况的描述,我们可以取取其较大值作为返回的最大乘积
解题代码如下
class Solution:
def maximumProduct(self, nums: List[int]) -> int:
nums = sorted(nums)
return max([nums[-1]*nums[-2]*nums[-3], nums[0]*nums[1]*nums[-1]])