Python程式設計題36--三個數的最大乘積
阿新 • • 發佈:2021-12-12
題目
給定一個整數列表 nums ,且 nums 中至少含有3個整數,請在列表中找出由三個陣列成的最大乘積,並輸出這個乘積。
例如:
給定一個列表:[1, 2, 3],返回結果:6
給定一個列表:[1, 2, -3, -3, 0],返回結果:18
實現思路1
- 使用
排序
的方式來實現,但時間複雜度為 O(nlog(n)) - 先對 nums 進行排序,排序後就可獲取到 nums 中最小的數 min1、第二小的數 min2、最大的數 max1、第二大的數 max2、第三大的數 max3
- 最大乘積只會有2種組合情況:max1 * max2 * max3、max1 * min1 * min2(因為 min1、min2均為負數時,相乘可變為正數),從而可以得到最大乘積。
程式碼實現1
def maximumProduct(nums):
nums.sort()
return max(nums[0] * nums[1] * nums[-1], nums[-3] * nums[-2] * nums[-1])
實現思路2
- 不使用排序,直接遍歷一次列表即可,時間複雜度O(n)
- 定義 min1、min2 為一個無窮大的數,所有數都比它們小;定義 max1、max2、max3 為一個無窮小的數,所有數都比它們大
- 遍歷過程中,如果當前整數小於 min1 ,那麼將 min1 置為當前整數,同時需將 min2 置為原來的 min1 ;如果當前整數大於等於 min1 且小於 min2 , 那麼將 min2 置為當前整數即可
- 遍歷過程中,如果當前整數大於 max1,那麼將 max1 置為當前整數,同時需將 max2、max3 置為原來的 min1、max2;如果當前整數小於等於 max1 且大於 max2,那麼將 max2 置為當前整數,同時需將 max3 置為原來的 max2;如果當前整數小於等於 max2 且大於 max3,那麼將 max3 置為當前整數即可
程式碼實現2
def maximumProduct(nums): min1, min2 = float("inf"), float("inf") # 定義一個無窮大的數,所有數都比 inf 小 max1, max2, max3 = float("-inf"), float("-inf"), float("-inf") # 定義一個無窮小的數,所有數都比 -inf 大 for num in nums: if num < min1: min1, min2 = num, min1 elif num < min2: min2 = num if num > max1: max1, max2, max3 = num, max1, max2 elif num > max2: max2, max3 = num, max2 elif num > max3: max3 = num num_product1 = max1 * max2 * max3 num_product2 = max1 * min1 * min2 return num_product1 if num_product1 > num_product2 else num_product2
作者:wintest 出處:https://www.cnblogs.com/wintest 本文版權歸作者和部落格園共有,歡迎轉載,但必須在文章頁面明顯位置給出原文連結,並保留此段宣告,否則保留追究法律責任的權利。更多Python程式設計題,等你來挑戰:Python程式設計題彙總(持續更新中……)