Fix solution 628

This commit is contained in:
YDZ
2021-01-21 15:53:19 +08:00
parent bfb9839828
commit 823d42ef9b
2 changed files with 47 additions and 40 deletions

View File

@ -1,6 +1,7 @@
package leetcode package leetcode
import ( import (
"math"
"sort" "sort"
) )
@ -32,28 +33,27 @@ func max(a int, b int) int {
// 解法二 模拟,时间复杂度 O(n) // 解法二 模拟,时间复杂度 O(n)
func maximumProduct1(nums []int) int { func maximumProduct1(nums []int) int {
n1, n2, n3 := -1<<63, -1<<63, -1<<63 max := make([]int, 0)
n4, n5 := 0, 0 max = append(max, math.MinInt64, math.MinInt64, math.MinInt64)
for _, v := range nums { min := make([]int, 0)
if v > n1 { min = append(min, math.MaxInt64, math.MaxInt64)
n3 = n2 for _, num := range nums {
n2 = n1 if num > max[0] {
n1 = v max[0], max[1], max[2] = num, max[0], max[1]
} else if v > n2 { } else if num > max[1] {
n3 = n2 max[1], max[2] = num, max[1]
n2 = v } else if num > max[2] {
} else if v > n3 { max[2] = num
n3 = v
} }
if v < n4 { if num < min[0] {
n5 = n4 min[0], min[1] = num, min[0]
n4 = v } else if num < min[1] {
} else if v < n5 { min[1] = num
n5 = v
} }
} }
if n2*n3 > n4*n5 { maxProduct1, maxProduct2 := min[0]*min[1]*max[0], max[0]*max[1]*max[2]
return n1 * n2 * n3 if maxProduct1 > maxProduct2 {
return maxProduct1
} }
return n1 * n4 * n5 return maxProduct2
} }

View File

@ -43,6 +43,7 @@ Given an integer array, find three numbers whose product is maximum and output t
package leetcode package leetcode
import ( import (
"math"
"sort" "sort"
) )
@ -65,32 +66,38 @@ func maximumProduct(nums []int) int {
return max(nums[0]*nums[1]*nums[len(nums)-1], nums[len(nums)-1]*nums[len(nums)-2]*nums[len(nums)-3]) return max(nums[0]*nums[1]*nums[len(nums)-1], nums[len(nums)-1]*nums[len(nums)-2]*nums[len(nums)-3])
} }
func max(a int, b int) int {
if a > b {
return a
}
return b
}
// 解法二 模拟,时间复杂度 O(n) // 解法二 模拟,时间复杂度 O(n)
func maximumProduct1(nums []int) int { func maximumProduct1(nums []int) int {
n1, n2, n3 := -1<<63, -1<<63, -1<<63 max := make([]int, 0)
n4, n5 := 0, 0 max = append(max, math.MinInt64, math.MinInt64, math.MinInt64)
for _, v := range nums { min := make([]int, 0)
if v > n1 { min = append(min, math.MaxInt64, math.MaxInt64)
n3 = n2 for _, num := range nums {
n2 = n1 if num > max[0] {
n1 = v max[0], max[1], max[2] = num, max[0], max[1]
} else if v > n2 { } else if num > max[1] {
n3 = n2 max[1], max[2] = num, max[1]
n2 = v } else if num > max[2] {
} else if v > n3 { max[2] = num
n3 = v
} }
if v < n4 { if num < min[0] {
n5 = n4 min[0], min[1] = num, min[0]
n4 = v } else if num < min[1] {
} else if v < n5 { min[1] = num
n5 = v
} }
} }
if n2*n3 > n4*n5 { maxProduct1, maxProduct2 := min[0]*min[1]*max[0], max[0]*max[1]*max[2]
return n1 * n2 * n3 if maxProduct1 > maxProduct2 {
return maxProduct1
} }
return n1 * n4 * n5 return maxProduct2
} }
``` ```