'''
题目描述
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述:
输入共2行,第一行包括一个整数n,表示数组长度
第二行为n个以空格隔开的整数,分别为A1,A2, … ,An
'''
import sys
n = int(input().strip().split()[0])
numbers = input().strip().split()
numbers = [int(x) for x in numbers]
max_ = [float("-inf"), float("-inf"), float("-inf")]
min_ = [float("inf"), float('inf')]
for num in numbers:
if num >= 0 and num > min(max_):
max_[max_.index(min(max_))] = num
elif num < 0 and num < max(min_):
min_[min_.index(max(min_))] = num
a = max_[0] * max_[1] * max_[2]
b = max(max_) * min_[0] * min_[1]
if abs(a) == float('inf'):
a = 0
if abs(b) == float('inf'):
b = 0
if a >= b:
sys.stdout.write(str(a))
else:
sys.stdout.write(str(b))
解题思路:先分析,要求三个数(有正有负有0)乘积最大,那肯定尽可能让最后的乘积是正的,思路就来了,即三个数要么是 + + +, 要么是 + - -, 即三个最大正数或者一个最大正数和两个最小负数,其他情况都是负数和0 了