leetcode 628. 三个数的最大乘积

题目描述

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

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

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

注意:

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

题解

找出最大的三个数和最小的两个数,比较最大三个数的乘积和最小两个数与最大数的乘积

示例代码(go)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func maximumProduct(nums []int) int {
res := 0
firstMax, secondMax, thirdMax := math.MinInt32, math.MinInt32, math.MinInt32
firstMin, secondMin := math.MaxInt32, math.MaxInt32
for _, v := range nums {
if v > firstMax {
firstMax, secondMax, thirdMax = v, firstMax, secondMax
} else if v > secondMax {
secondMax, thirdMax = v, secondMax
} else if v > thirdMax {
thirdMax = v
}

if v < firstMin {
firstMin, secondMin = v, firstMin
} else if v < secondMin {
secondMin = v
}
}
res = firstMax * secondMax * thirdMax
if res < firstMin * secondMin * firstMax {
res = firstMin * secondMin * firstMax
}
return res
}