628. 三个数的最大乘积

链接

给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例1

输入: [1,2,3]
输出: 6

示例2

输入: [1,2,3,4]
输出: 24

注意:

  • 给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
  • 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。

题解

由于数组中的数可能有正数也可能有负数所以最大乘积会有以下几种情况:

1.如果数组中的元素全是负数的话,那最大乘积就是三个最大负数相乘

2.如果数组中的元素有正有负最大乘积可能为升序排序后的最后三个数的乘积

或前两个元素的乘积再乘以最后一个元素的乘积

综合上述情况分析可知

只需找出该数组中的最大三个数(maxA,maxB,maxC)和最小两个数(minA,minB)

比较一下maxAmaxBmaxC和minAminBmaxA

返回二者中的比较大的那一个即可

func maximumProduct(nums []int) int {

	max := -1001
	max1 := -1001
	max2 := -1001
	min1 := 1001
	min2 := 1001

	for _, n := range nums {
		switch {
		case n > max:
			max2, max1, max = max1, max, n
		case n > max1:
			max2, max1 = max1, n
		case n > max2:
			max2 = n
		}

		switch {
		case n < min1:
			min2, min1 = min1, n
		case n < min2:
			min2 = n
		}
	}

	return bigger(max1*max2, min1*min2) * max
}

func bigger(a, b int) int {
	if a > b {
		return a
	}
	return b
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值