diff --git a/golang/2202/220219.go b/golang/2202/220219.go new file mode 100644 index 0000000..65fdc2f --- /dev/null +++ b/golang/2202/220219.go @@ -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})) +} diff --git a/golang/go.mod b/golang/go.mod index 9321f94..2d48c8b 100644 --- a/golang/go.mod +++ b/golang/go.mod @@ -1,3 +1,5 @@ module golang go 1.18 + +require github.com/emirpasic/gods v1.12.0