mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-25 12:14:26 +08:00
39 lines
574 B
Go
39 lines
574 B
Go
package leetcode
|
|
|
|
import (
|
|
"container/heap"
|
|
"sort"
|
|
)
|
|
|
|
type KthLargest struct {
|
|
sort.IntSlice
|
|
k int
|
|
}
|
|
|
|
func Constructor(k int, nums []int) KthLargest {
|
|
kl := KthLargest{k: k}
|
|
for _, val := range nums {
|
|
kl.Add(val)
|
|
}
|
|
return kl
|
|
}
|
|
|
|
func (kl *KthLargest) Push(v interface{}) {
|
|
kl.IntSlice = append(kl.IntSlice, v.(int))
|
|
}
|
|
|
|
func (kl *KthLargest) Pop() interface{} {
|
|
a := kl.IntSlice
|
|
v := a[len(a)-1]
|
|
kl.IntSlice = a[:len(a)-1]
|
|
return v
|
|
}
|
|
|
|
func (kl *KthLargest) Add(val int) int {
|
|
heap.Push(kl, val)
|
|
if kl.Len() > kl.k {
|
|
heap.Pop(kl)
|
|
}
|
|
return kl.IntSlice[0]
|
|
}
|