1. 程式人生 > 其它 >json格式化列印

json格式化列印

題目描述

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

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

原題請參考連結https://leetcode-cn.com/problems/maximum-product-of-three-numbers/

題解

方法一 【排序法】

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

方法二 【非排序法】

// 此方法的精妙之處在於一次遍歷找出5個值,即最大值,第二大值,第三大值,最小值,次小值
// 問題的解無非兩個最小的負數乘最大的正數【陣列中有正負】,兩個最小的負數乘最大的負數【陣列中只有負】,
// 三個最大的正數相乘【陣列中有正負或者只有正】
class Solution:
    def maximumProduct(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)
        max1 = -float('inf')       # 第一大的值
        max2 = -float('inf')       # 第二大的值
        max3 = -float('inf')       # 第三大的值
        min1 = float('inf')        # 第一小的值
        min2 = float('inf')        # 第二小的值

        for num in nums:
            if num > max1:         
                max3 = max2        
                max2 = max1        
                max1 = num         
            elif num > max2:       
                max3 = max2        
                max2 = num         
            elif num > max3:       
                max3 = num         
            
            if num < min1:         
                min2 = min1        
                min1 = num         
            elif num < min2:       
                min2 = num                  
        return max(max1 * max2 * max3, max1 * min1 * min2)