題目
給定一個無序數組,包含正數、負數和0,要求從中找出3個數的乘積,使得乘積最大,要求時間複雜度:O(n),空間複雜度:O(1)
輸入描述:
輸入共2行,第一行包括一個整數n,表示數組長度
第二行爲n個以空格隔開的整數,分別爲A1,A2, … ,An
輸出描述:
滿足條件的最大乘積
示例:
輸入:
4
3 4 1 2
輸出:
24
思路
- 確定5個數,如果都是正數則,最大的是max1*max2*max3
- 如果有正有負,則max1*min1*min2
源碼
num_ele=int(raw_input())
input_array = list(map(int,raw_input().split(" ")))
max1,max2,max3=float("-inf"),float("-inf"),float("-inf")
min1,min2=float("inf"),float("inf")
index=0
while num_ele>0:
cur_num=input_array[index]
if cur_num>max1:
max3=max2
max2=max1
max1=cur_num
elif cur_num>max2:
max3=max2
max2=cur_num
elif cur_num>max3:
max3=cur_num
if cur_num<min1:
min2=min1
min1=cur_num
elif cur_num<min2:
min2=cur_num
index+=1
num_ele-=1
print(max(min1*min2*max1,max1*max2*max3))