P07 数组中的三数最大乘积

寻找数组中三数之积的最大值算法解析
本文介绍了如何找到整数数组中三数之积的最大值。通过线性扫描,动态维护最大和最小值,分别计算正负数情况下三数之积的最大值。算法高效地解决了全正数、全负数以及正负数数组的问题。

整数数组的三数之积

全正数: 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,53 * 4 * 5三个最大值
全负数-5,-4,-3,-2,-1-3 * -2 * -1三个最大值
正负数-1,1,2,3,42 * 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)))
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值