
堆
AgoniAngel
我的bug早已饥渴难耐
展开
-
Top k 问题的两种经典解法
【题目】给定一个长为n的数组,找出其中最小的k个数(或 第k小的数)。【思路】以找"最小的k个数"为例。方法一:堆class Solution {public: vector<int> getLeastKNums(vector<int>& arr, int k) { int n = arr.size(); ve...原创 2020-04-21 00:18:04 · 291 阅读 · 0 评论 -
堆排序原理及实现
原理以升序排序为例(升序采用大顶堆,降序采用小顶堆)。可以分成2步:(1)将待排序的序列构造成一个大顶堆,这时堆顶就是序列的最大值。(2)将堆顶元素和末尾元素进行交换,这时最大值就放到了末尾。然后将剩下n-1个元素重新构造成一个堆,这样堆顶就是n个元素的次大值。这样反复执行n-1轮后,序列就排好序了。第1步:将待排序的序列构造成一个堆思想:从最后一个非叶子节点开始,对于每...原创 2020-04-16 00:09:51 · 812 阅读 · 0 评论 -
实现堆(push/pop)
堆可以用数组模拟。假设堆顶在arr[1],那么任意节点 i 的左右子节点分别是 2i 和 2i+1,父节点是i/2.堆具有以下性质: 大顶堆:arr[i] >= arr[2i] && arr[i] >= arr[2i+1] (i = 1,2…) 小顶堆:arr[i] <= arr[2i] && arr[i] &...原创 2020-04-15 23:17:13 · 1827 阅读 · 1 评论