題目描述
給定一個無序數組,包含正數、負數和0,要求從中找出3個數的乘積,使得乘積最大,要求時間複雜度:O(n),空間複雜度:O(1)
輸入描述:
無序整數數組A[n]
輸出描述:
滿足條件的最大乘積
思路
由於只需要找出3個數的最大乘積,那麼只有兩種可能:
- 最大數、次大數和第三大數的乘積;
- 最大數、最小數和次小數的乘積(負負得正)。
因此,只需要將輸入數字遍歷一次,保存最大值、次大值、第三大值以及最小值和次小值即可。
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))