215. 数组中的第K个最大元素

18 阅读1分钟

注意

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
}