用三个数 记录 前三大的正数
用两个数 记录 最小的两个 负数
就是三种情况
1、前三大的正数相乘
2、最大的正数 和 最小的两个负数 相乘
3、0
class Solution:
def solve(self , A ):
# 三个数 记录前三最大 正数
m1, m2, m3 = float('-inf'), float('-inf'), float('-inf')
# 两个 记录前两最小 负数
q1, q2 = float('inf'), float('inf')
n = len(A)
for a in A:
# 如果大于 第一大 更新记录 前三大的数
if a > m1:
m1, m2, m3 = a, m1, m2
else:
# 如果大于 第二大 更新记录 前二大的数
if a > m2:
m2, m3 = a, m2
else:
# 大于 第三大 替换 第三大
if a > m3:
m3 = a
# 小于 最小 更新 前最二小
if a < q1:
q1, q2 = a, q1
else:
# 小于 第二小 替换第二小
if a < q2:
q2 = a
# 有可能 三个负数 一个0的情况
# 所以加上0
# 三个最大的数 第一大的数和最小的两个负数
return max(m1*q1*q2, m1*m2*m3, 0)
京公网安备 11010502036488号