json格式化列印
阿新 • • 發佈:2021-01-20
題目描述
給定一個整型陣列,在陣列中找出由三個陣列成的最大乘積,並輸出這個乘積。
【注意】給定的整型陣列長度範圍是[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)