add: 220219 [golang]
This commit is contained in:
parent
b3505f0c05
commit
cdb4eb86a3
|
|
@ -0,0 +1,46 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/emirpasic/gods/trees/binaryheap"
|
||||
"github.com/emirpasic/gods/utils"
|
||||
)
|
||||
|
||||
func minimumDeviation(nums []int) int {
|
||||
maxHeap := binaryheap.NewWith(func(a, b interface{}) int {
|
||||
return -utils.IntComparator(a, b)
|
||||
})
|
||||
min, ret := 0x7FFFFFFF, 0x7FFFFFFF
|
||||
for _, v := range nums {
|
||||
if v&1 == 1 {
|
||||
v <<= 1
|
||||
}
|
||||
maxHeap.Push(v)
|
||||
if min > v {
|
||||
min = v
|
||||
}
|
||||
}
|
||||
// fmt.Println(maxHeap.Values())
|
||||
for {
|
||||
xInterface, _ := maxHeap.Pop()
|
||||
x := xInterface.(int)
|
||||
if x&1 == 1 {
|
||||
if x-min < ret {
|
||||
return x - min
|
||||
}
|
||||
return ret
|
||||
}
|
||||
if ret > x-min {
|
||||
ret = x - min
|
||||
}
|
||||
if min > (x >> 1) {
|
||||
min = x >> 1
|
||||
}
|
||||
maxHeap.Push(x >> 1)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(minimumDeviation([]int{4, 1, 5, 20, 3}))
|
||||
}
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
module golang
|
||||
|
||||
go 1.18
|
||||
|
||||
require github.com/emirpasic/gods v1.12.0
|
||||
|
|
|
|||
Loading…
Reference in New Issue