628. 三個數的最大乘積(傻瓜教程)(python)(LC)
阿新 • • 發佈:2021-01-21
628. 三個數的最大乘積
給定一個整型陣列,在陣列中找出由三個陣列成的最大乘積,並輸出這個乘積。
示例 1:
輸入: [1,2,3]
輸出: 6
示例 2:
輸入: [1,2,3,4]
輸出: 24
注意: 給定的整型陣列長度範圍是[3,104],陣列中所有的元素範圍是[-1000, 1000]。 輸入的陣列中任意三個數的乘積不會超出32位有符號整數的範圍。
解題
基本思路:最大乘積的組合可能為(+,+,+)或(+,-,-)
一、排序(呼叫函式)
class Solution:
def maximumProduct1(self, nums: List[int]) -> int:
nums.sort()
a = nums[-1] * nums[-2] * nums[-3]
b = nums[0] * nums[1] * nums[-1]
return max(a, b)
二、排序(排序的具體展開)(陣列的動態維護)
class Solution:
def maximumProduct(self, nums: List[int]) -> int:
a = b = c = float('-inf')
d = e = float('inf')
for i, num in enumerate(nums):
# 更新最大三個數
if num > a:
a, b, c = num, a, b
elif num > b:
b, c = num, b
elif num > c:
c = num
# 更新最小兩個數
if num < d:
d, e = num, d
elif num < e:
e = num
return max(d * e * a, a * b * c)