2018拼多多校招【最大乘積】Python解法

題目描述

給定一個無序數組,包含正數、負數和0,要求從中找出3個數的乘積,使得乘積最大,要求時間複雜度:O(n),空間複雜度:O(1)

輸入描述:

無序整數數組A[n]

輸出描述:

滿足條件的最大乘積

思路

由於只需要找出3個數的最大乘積,那麼只有兩種可能:

  1. 最大數、次大數和第三大數的乘積;
  2. 最大數、最小數和次小數的乘積(負負得正)。

因此,只需要將輸入數字遍歷一次,保存最大值、次大值、第三大值以及最小值和次小值即可。

Python源碼

n = int(input())
A = list(map(int, input().split()))
max1, max2, max3, min1, min2 = 0, 0, 0, 0, 0
for i in range(n):
    if A[i] > max1:
        max3, max2, max1 = max2, max1, A[i]
    elif A[i] > max2:
        max3, max2 = max2, A[i]
    elif A[i] > max3:
        max3 = A[i]
    elif A[i] < min1:
        min2, min1 = min1, A[i]
    elif A[i] < min2:
        min2 = A[i]
print(max(max1*max2*max3, max1*min1*min2))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章