在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
思路
维护一个最小堆即可 每次判断堆顶元素和新建入的元素 如果新元素大于堆顶则替换堆顶元素 重新排序
实现
funcfindKthLargest(nums []int, k int)int{iflen(nums)< k{return0}
heap :=make([]int,0)for_, num :=range nums{iflen(heap)< k{
heap =append(heap, num)iflen(heap)== k{buildHeap(heap)}continue}if num > heap[0]{
heap[0]= num
heapHelp(heap, k,0)}}return heap[0]}funcbuildHeap(heap []int){
size :=len(heap)for i := size -1; i >=0; i--{heapHelp(heap, size, i)}return}funcheapHelp(heap []int, size, curRoot int){
left :=2*curRoot+1
right :=2*curRoot+2
smallest := curRoot
if left < size && heap[left]< heap[smallest]{
smallest = left
}if right < size && heap[right]< heap[smallest]{
smallest = right
}if smallest != curRoot{
heap[smallest], heap[curRoot]= heap[curRoot], heap[smallest]heapHelp(heap, size, smallest)}return}