题目
给定一个无序数组,包含正数、负数和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))