注意
1 golang使用堆比c++麻烦一些,需要自己实现函数
2 注意pop() 和 Push() 函数的出入参是interface{}
3 具体到这个题,优先队列
ype HeapInt []int
/*
这三个是sort interface 的方法
*/
func (h HeapInt) Len() int {
return len(h)
}
func (h HeapInt) Less(i, j int) bool {
return h[i] < h[j]
}
func (h HeapInt) Swap(i, j int) {
h[i], h[j] = h[j], h[i]
}
/*
这三个是heap interface 的方法
*/
func (h *HeapInt) Pop() interface{} {
length := h.Len()
ans := (*h)[length-1]
*h = (*h)[0 : length-1]
return ans
}
func (h *HeapInt) Push(num interface{}) {
v := num.(int)
*h = append(*h, v)
}
func findKthLargest(nums []int, k int) int {
heapInt := HeapInt(make([]int, 0))
heap.Init(&heapInt)
for _, v := range nums {
heap.Push(&heapInt, v)
if heapInt.Len() > k {
heap.Pop(&heapInt)
}
}
ans := heap.Pop(&heapInt).(int)
return ans
}