题目:
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
算法:
结果是 【最小两个负数*最大正数】和【三个最大正数的最大值】
方法一:排序
import "sort"
func maximumProduct(nums []int) int {
sort.Ints(nums)
if len(nums) == 3 {
return nums[0] * nums[1] * nums[2]
}
max1 := nums[0] * nums[1] * nums[len(nums)-1]
max2 := nums[len(nums)-3] * nums[len(nums)-2] * nums[len(nums)-1]
if max1 > max2 {
return max1
}
return max2
}
方法二:线性扫描,直接得到最大的三个数和最小的两个数
func maximumProduct(nums []int) int {
max1, max2, max3 := math.MinInt32, math.MinInt32, math.MinInt32
min1, min2 := math.MaxInt32, math.MaxInt32
for i := range nums {
if nums[i] > max1 {
max3 = max2
max2 = max1
max1 = nums[i]
} else if nums[i] > max2 {
max3 = max2
max2 = nums[i]
} else if nums[i] > max3 {
max3 = nums[i]
}
if nums[i] < min1 {
min2 = min1
min1 = nums[i]
} else if nums[i] < min2 {
min2 = nums[i]
}
}
res1 := max1 * max2 * max3
res2 := min1 * min2 * max1
if res1 > res2 {
return res1
}
return res2
}