天天看點

Leetcode刷題 (Python)628 三個數的最大乘積

題目描述:

給定一個整型數組,在數組中找出由三個數組成的最大乘積,并輸出這個乘積。

示例 1:

輸入: [1,2,3]

輸出: 6

示例 2:

輸入: [1,2,3,4]

輸出: 24

注意:

給定的整型數組長度範圍是[3,104],數組中所有的元素範圍是[-1000, 1000]。

輸入的數組中任意三個數的乘積不會超出32位有符号整數的範圍。

解題思路:

先把數組排序,如果數組裡全是正數或者三個最大的數字裡有一個負數,那麼三個最大的數相乘就是答案了。但是如果數組裡有兩個以上負數,那麼就要比較最大三個數的乘積和兩個最小數乘以最大數的乘積,誰大誰就是答案。

代碼實作:

class Solution:
    def maximumProduct(self, nums: List[int]) -> int:
        nums.sort()
        if nums[-1]*nums[-2]*nums[-3] > nums[0]*nums[1]*nums[-1]:
            return nums[-1]*nums[-2]*nums[-3]
        else:
            return nums[0]*nums[1]*nums[-1]