47 lines
756 B
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}))
|
|
}
|