class MinHeap {
constructor() {
this.heap = []
}
insert(val) {
this.heap.push(val)
let index = this.heap.length - 1
this.shiftUp(index)
}
getParentIndex(index) {
return Math.floor((index - 1) / 2)
}
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[index] < this.heap[parentIndex]) {
this.swap(index, parentIndex)
this.shiftUp(parentIndex)
}
}
swap(index, parentIndex) {
[this.heap[index], this.heap[parentIndex]] = [this.heap[parentIndex], this.heap[index]]
}
pop() {
this.heap[0] = this.heap.pop()
this.shiftDown(0)
}
shiftDown(index) {
let leftIndex = this.getLeftIndex(index)
let 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)
}
}
peek() {
return this.heap[0]
}
size() {
return this.heap.length
}
}
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var findKthLargest = function(nums, k) {
var heap = new MinHeap()
nums.forEach(item =>{
heap.insert(item)
if(heap.size()>k){
heap.pop()
}
})
return heap.peek()
};
Leecode 215. 数组中的第K个最大元素
最新推荐文章于 2024-08-15 05:02:54 发布