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