给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例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
}