我总是忘记的数据结构: 优先队列 一种方法(也是最好的方法)是使用堆 堆是二叉树,其每个父节点的值都小于或等于其任何子节点的值。 此实现使用所有k的heap [k] <= heap [2 k + 1]和heap [k] <= heap [2 k + 2]的数组,从零开始计数元素。 例子: h = [] heappush(h,(5,'编写代码')) heappush(h,(7,'发布产品')) heappush(h,(1,'写规格')) heappush(h,(3,'创建测试')) heappop(h):(1,'写规范') 复杂: 空间:O(n) 插入:O(logn) 流行:O(登录) 通过一次插入1个元素来构建堆:O(nlogn) 一次构建带有所有元素的堆:使用弗洛伊德(Floyd)算法的O(n) 变体:仅保留第k个最大元素。 如果小于根,则丢弃。 双链表