实现最小堆类
Posted 沿着路走到底
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现最小堆类相关的知识,希望对你有一定的参考价值。
在类里,声明一个数组,用来装元素。
主要方法:插入、删除堆项、获取堆项、获取堆大小。
插入
将值插入堆的底部,即数组的尾部。
然后上移:将这个值和它的父节点进行交换,直到父节点小于等于这个插入的值。
大小为 K 的堆中插入元素的时间复杂度为 O(logK)。
删除堆顶
用数组尾部元素替换堆顶(直接删除堆顶会破坏堆结构)。
然后下移:将新堆顶和它的子节点进行交换,直到子节点大于等于这个新堆项。
大小为 K 的 堆中删除堆顶的时间复杂度为 O(logK)。
获取堆顶和堆的大小
获取堆顶:返回数组的头部。
获取堆的大小:返回数组的长度。
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 (i - 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
1
以上是关于实现最小堆类的主要内容,如果未能解决你的问题,请参考以下文章
华为机试真题 Python 实现最小调整顺序次数2022.11 Q4新题
华为OD机试真题 JavaScript 实现最小调整顺序次数2023 Q1 | 100分