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 }