堆(优先队列)
写了这么久代码,我发现很多数据结构本质上都是为了解决特定场景下的效率问题。数组增删慢、查询快;链表增删快、查询慢。那如果我有个需求:动态地、快速地找到一群数据里的最大值或最小值,该用啥? 你可能会说,用个数组存着,每次找最大值就遍历一遍,O(N) 嘛。可以,但如果这个操作要进行一万次呢?效率太低了。如果我每次插入新数据后都排序呢?那插入一个数就得 O(N*logN),更慢。 这时候,堆(Heap)就该登场了。它就是为了这个场景而生的。 一、掰开揉碎,啥是堆? 说白了,堆就是一个特殊的树。但你别被...
Date: |Estimated Reading Time: 4 min|Author: MrHe