# 求三个数最大乘积
# 思路:三个数都是正数,则取最大三个数;三个数都是复数,也取最大三个数;有正有负,取最小的2个负数、最大的正数
# 排序求解
from math import inf
def func1(li:list):
li.sort()
return max(li[0]*li[1]*li[-1], li[-1]*li[-2]*li[-3])
# 线性扫描求解
def func2(li:list):
import sys
# min1 = sys.maxsize
# min2 = sys.maxsize
# max1 = -sys.maxsize-1
# max2 = -sys.maxsize-1
# max3 = -sys.maxsize-1
min1 = float('inf')
min2 = float('inf')
max1 = float('-inf')
max2 = float('-inf')
max3 =float('-inf')
for i in li:
if i<min1:
min2 = min1
min1 = i
elif i<min2:
min2 = i
if i>max1:
max3=max2
max2 = max1
max1 = i
elif i > max2:
max3=max2
max2 = i
elif i >max3:
max3 = i
return max(min1*min2*max1,max1*max2*max3)
li = [-1,-2,-3,-4,-5,-6,-7,8,-9]
print(func1(li))
print(func2(li))