[LeetCode] 628. 三個數的最大乘積

1 題目描述

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

示例 1:

輸入: [1,2,3]
輸出: 6
示例 2:

輸入: [1,2,3,4]
輸出: 24
注意:

給定的整型數組長度範圍是[3,104],數組中所有的元素範圍是[-1000, 1000]。
輸入的數組中任意三個數的乘積不會超出32位有符號整數的範圍。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-product-of-three-numbers
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

2 解題思路

解決方法:排序

將數組進行升序排序,如果數組中所有的元素都是非負數,那麼答案即爲最後三個元素的乘積。

如果數組中出現了負數,那麼我們還需要考慮乘積中包含負數的情況,顯然選擇最小的兩個負數和最大的一個正數是最優的,即爲前兩個元素與最後一個元素的乘積。

上述兩個結果中的較大值就是答案。注意我們可以不用判斷數組中到底有沒有正數,0 或者負數,因爲上述兩個結果實際上已經包含了所有情況,最大值一定在其中。

作者:LeetCode
鏈接:https://leetcode-cn.com/problems/maximum-product-of-three-numbers/solution/san-ge-shu-de-zui-da-cheng-ji-by-leetcode/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

3 解決代碼

  • Java 代碼
class Solution(object):
    def maximumProduct(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        return max(nums[-1] * nums[-2] * nums[-3], nums[0]*nums[1]*nums[-1])
  • python 代碼
class Solution(object):
    def maximumProduct(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        return max(nums[-1] * nums[-2] * nums[-3], nums[0]*nums[1]*nums[-1])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章