mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-13 07:14:17 +08:00
Fix solution 628
This commit is contained in:
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
Reference in New Issue
Block a user