From cdb4eb86a3e8784a8ad59dfbb6d6ad47b8aad798 Mon Sep 17 00:00:00 2001 From: Lam Haoyin Date: Sun, 20 Feb 2022 00:06:00 +0800 Subject: [PATCH] add: 220219 [golang] --- golang/2202/220219.go | 46 +++++++++++++++++++++++++++++++++++++++++++ golang/go.mod | 2 ++ 2 files changed, 48 insertions(+) create mode 100644 golang/2202/220219.go 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