給定一個(gè)整型數(shù)組耀石,在數(shù)組中找出由三個(gè)數(shù)組成的最大乘積臣疑,并輸出這個(gè)乘積恬惯。
示例 1:
輸入: [1,2,3]
輸出: 6
示例 2:
輸入: [1,2,3,4]
輸出: 24
注意:
給定的整型數(shù)組長(zhǎng)度范圍是[3,104],數(shù)組中所有的元素范圍是[-1000, 1000]罪既。
輸入的數(shù)組中任意三個(gè)數(shù)的乘積不會(huì)超出32位有符號(hào)整數(shù)的范圍。
數(shù)字有可能有負(fù)數(shù)
由于是三個(gè)數(shù)的最大乘積铡恕,所以就符號(hào)而言琢感,有三種情況:
(1) 三個(gè)均為正
(2) 一個(gè)正,兩個(gè)負(fù)
(3)如果數(shù)字全部為負(fù)
數(shù)組長(zhǎng)度大于等于3的時(shí)候探熔,找到三個(gè)數(shù)的乘積最大需要滿(mǎn)足兩個(gè)條件
- 有0個(gè)負(fù)數(shù)驹针,即三個(gè)數(shù)都是正數(shù)且最大
- 有2個(gè)負(fù)數(shù),一個(gè)正數(shù)
題可以轉(zhuǎn)化為诀艰,查找3個(gè)最大的數(shù)并且查找兩個(gè)最小的數(shù)柬甥,查找到以后,比較三個(gè)最大的數(shù)的乘積和兩個(gè)最小的數(shù)與一個(gè)最大的數(shù)的乘積的大小
class Solution(object):
def maximumProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums)==3:
return nums[0]*nums[1]*nums[2]
elif len(nums)<3:
return 0
else:
nums.sort()
return max(nums[-1]*nums[-2]*nums[-3], nums[0]*nums[1]*nums[-1])