leetcode-daily/old/golang/2202/220219.go

47 lines
756 B
Go

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}))
}