215. 数组中的第K个最大元素
Posted 沿着路走到底
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了215. 数组中的第K个最大元素相关的知识,希望对你有一定的参考价值。
给定整数数组 nums 和整数 k,请返回数组中第 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 个最大元素“。
考虑选择最小堆。
解题步骤
构建一个最小堆,并依次把数组的值插入堆中。
当堆的容量超过K,就删除堆顶。
插入结束后,堆顶就是第K个最大元素。
class MinHeap
constructor()
this.heap = []
swap(parentIndex, childIndex)
const temp = this.heap[parentIndex]
this.heap[parentIndex] = this.heap[childIndex]
this.heap[childIndex] = temp
getParentIndex(index)
//return Math.floor((index - 1) / 2)
return (index - 1) >> 1
getLeftIndex(index)
return index * 2 + 1
getRightIndex(index)
return index * 2 + 2
shiftUp(index)
if (index === 0) return
const parentIndex = this.getParentIndex(index)
if(this.heap[parentIndex] > this.heap[index])
this.swap(parentIndex, index)
this.shiftUp(parentIndex)
shiftDown(index)
const leftIndex = this.getLeftIndex(index)
const rightIndex = this.getRightIndex(index)
if(this.heap[index] > this.heap[leftIndex])
this.swap(index, leftIndex)
this.shiftDown(leftIndex)
if(this.heap[index] > this.heap[rightIndex])
this.swap(index, rightIndex)
this.shiftDown(rightIndex)
insert (value)
this.heap.push(value)
this.shiftUp(this.heap.length - 1)
pop ()
this.heap[0] = this.heap.pop()
this.shiftDown(0)
peek()
return this.heap[0]
size()
return this.heap.length
/**
* @param number[] nums
* @param number k
* @return number
解题思路
看到 ”第 K 个最大元素“。
考虑选择最小堆。
解题步骤
构建一个最小堆,并依次把数组的值插入堆中。
当堆的容量超过K,就删除堆顶。
插入结束后,堆顶就是第K个最大元素。
*/
var findKthLargest = function(nums, k)
const heap = new MinHeap()
nums.forEach(num =>
heap.insert(num)
if(heap.size() > k)
heap.pop()
)
return heap.peek()
;
1
以上是关于215. 数组中的第K个最大元素的主要内容,如果未能解决你的问题,请参考以下文章