【学习打卡】第23天 数据结构和算法
2022/8/31 4:22:53
本文主要是介绍【学习打卡】第23天 数据结构和算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JS实现最小堆
插入元素insert
- 将值插入堆的底部(数组的尾部)
- 执行上移操作:将这个值和父节点进行比较,直到父节点小于等于这个节点
- 大小为k的堆的插入元素的时间复杂度是O(logk)
删除堆顶pop
- 用数组尾部元素替换堆顶(直接删除堆顶会破坏堆的结构)
- 执行下移操作:堆顶元素和子节点进行比较,直至子节点大于等于新堆顶元素
- 大小为k的堆的删除堆顶的时间复杂度是O(logk)
获取堆顶peek
- 返回数组的第一个元素
获取堆的长度size
- 返回数组的长度
class MinHeap { constructor() { this.heap = []; } swap(i1, i2) { const temp = this.heap[i1]; this.heap[i1] = this.heap[i2]; this.heap[i2] = temp; } 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[parentIndex] > this.heap[index]) { this.swap(index, parentIndex); this.shiftUp(parentIndex) } } shiftDown(index) { if (index === this.heap.length - 1) return; 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(val) { this.heap.push(val); 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; } } const heap = new MinHeap(); // 添加顺序不同,生成的堆也不同 heap.insert(5) heap.insert(4) heap.insert(3) heap.insert(2) heap.insert(1) heap.pop() // heap.insert(1) // heap.insert(2) // heap.insert(3) // heap.insert(4) // heap.insert(5) // heap.pop()
这篇关于【学习打卡】第23天 数据结构和算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解