package main
import "math"
/**
* 最大乘积
* @param A int整型一维数组
* @return long长整型
*/
func solve( A []int ) int64 {
// write code here
if len(A) < 3 {
return 0
}
// 用三个数 记录 前三大的正数
// 用两个数 记录 最小的两个 负数
// 就是三种情况
// 1、前三大的正数相乘
// 2、最大的正数 和 最小的两个负数 相乘
// 3、0
// 三个数 记录前三最大 正数
var max1, max2, max3 int64 = math.MinInt64, math.MinInt64, math.MinInt64
// 两个 记录前两最小 负数
var min1, min2 int64 = math.MaxInt64, math.MaxInt64
for _, d := range A {
v := int64(d)
// 小于 最小 更新 前最二小
if v < min1 {
min2 = min1
min1 = v
}else if v < min2 {
min2 = v
}
// 如果大于 第一大 更新记录 前三大的数
if v > max1 {
max3 = max2
max2 = max1
max1 = v
}else if v > max2 {
max3 = max2
max2 = v
}else if v > max3 {
max3 = v
}
}
// 有可能 三个负数 一个0的情况
// 所以加上0
// 三个最大的数 第一大的数和最小的两个负数
return maxs(max1*min1*min2, max1*max2*max3, 0)
}
func maxs(a, b, c int64) int64 {
max := a
if b > max {
max = b
}
if c > max {
max = c
}
return max
}