用三个数 记录 前三大的正数
用两个数 记录 最小的两个 负数
就是三种情况
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)