Maximum Product Of Three Numbers
题目描述
三个数的最大乘积
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并且返回。
示例
输入:[1, 2, 3, 4]
输出:24
解法
思想:
需要考虑两个负数和一个整数相乘的情况。所以计算最大的三个数的乘积,以及最小的两个数 和最大一个数的乘积,比较两者即可。
解法一: 排序
时间复杂度:
O(nlogn)
空间复杂度:
O(1)
func maximumProduct(nums []int) int {
sort.Ints(nums)
n := len(nums)
head := nums[0] * nums[1] * nums[n-1]
tail := nums[n-1] * nums[n-2] * nums[n-3]
if head > tail {
return head
}
return tail
}
解法二: 线性遍历
时间复杂度:
O(n)
空间复杂度:
O(1)
func maximumProduct(nums []int) int {
max1, max2, max3 := math.MinInt64, math.MinInt64, math.MinInt64
min1, min2 := math.MaxInt64, math.MaxInt64
for _, v := range nums {
if max1 < v {
max1, max2, max3 = v, max1, max2
} else if max2 < v {
max2, max3 = v, max2
} else if max3 < v {
max3 = v
}
if min1 > v {
min1, min2 = v, min1
} else if min2 > v {
min2 = v
}
}
one := max1 * max2 * max3
two := max1 * min1 * min2
if one < two {
return two
}
return one
}
Last updated
Was this helpful?