整数数组的三数之积
全正数: 1,2,3,4,5 乘积最大值(3*4*5)三个最大值
全负数: -5,-4,-3,-2,-1 -1、-2、-3 三个最大值
正负数: -1,1,2,3,4 2,3,4 三个最大值
正负数:-4,-3,-2,-1,1 -4,-3,1 两最小、一最大
| 情况 | 数组 | 结果 | 描述 |
|---|---|---|---|
| 全正数 | 1,2,3,4,5 | 3 * 4 * 5 | 三个最大值 |
| 全负数 | -5,-4,-3,-2,-1 | -3 * -2 * -1 | 三个最大值 |
| 正负数 | -1,1,2,3,4 | 2 * 3 * 4 | 三个最大值 |
| 正负数 | -4,-3,-2,-1,1 | -4 * -3 * 1 | 两最大一最小值 |
所以结果为max((max1 * max2 * max3) , (min1 * min2 * max3))
找出数组中的三个最大值和两个最小值即可
线性扫描
func ProductOfThreeNumber(nums int[]) int {
// 属性从小到大
var min1, min2, max1, max2, max3 = math.MaxInt64, math.MaxInt64, math.MinInt64, math.MinInt64, math.MinInt64
for _, item := range nums{
if item > max3 { // 大于最大的,前三名依此更新属性值
max1 = max2
max2 = max3
max3 = item
}else if item > max2 { // 仅大于第二,第二第三依此更新属性值
max1 = max2
max2 = item
}else if item > max1{ // 仅比第三大的大,更新当前属性值
max1 = item
}
if min1 > item { // 比最小的还小,依此更新前二小属性值
min2 = min1
min1 = item
}else if min2 > item{ // 仅比第二小的小,更新当前属性值
min2 = item
}
}
return int(math.Max(float64(max1*max2*max3), float64(min1*min2*max3)))
}
寻找数组中三数之积的最大值算法解析
本文介绍了如何找到整数数组中三数之积的最大值。通过线性扫描,动态维护最大和最小值,分别计算正负数情况下三数之积的最大值。算法高效地解决了全正数、全负数以及正负数数组的问题。
1217

被折叠的 条评论
为什么被折叠?



