プログラミング問題:最大積


正数、負数、0を含む無秩序配列を与え、そこから3つの数の積を探し出し、積を最大にし、時間複雑度:O(n)、空間複雑度:O(1)を要求する.
入力説明:無秩序整数配列A[n]出力説明:条件を満たす最大積例1入力3 4 1 2出力24
配列中の最大a,第2の大きいb,第3の大きいc,最小d,および第2の小さいeの数を見つければよいが,結果はabcまたはadeにすぎない.
n = int(input())
data = list(map(int, input().split()))
max_0, max_1, max_2, min_0, min_1 = float('-inf'), float('-inf'), float('-inf'), float('inf'), float('inf')
for num in data:
    if num > max_0:
        max_2, max_1 = max_1, max_0
        max_0 = num
    elif num>max_1:
        max_2, max_1 = max_1, num
    elif num > max_2:
        max_2 = num
    if num < min_0:
        min_1, min_0 = min_0, num
    elif num <min_1:
        min_1 = num
print(max(max_0*max_1*max_2, max_0*min_1*min_0))