堆基础

堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值:

图片来源:这里

堆可以用数组存储,插入、删除会触发节点shift_down、shift_up操作,时间复杂度O(logn),可视化构建堆

堆是优先级队列(Priority queue)的底层数据结构,较常使用优先级队列而非直接使用堆处理问题。利用堆的性质可以方便地获取极值,例如 LeetCode 题目 215. Kth Largest Element in an Array,时间复杂度O(nlogn):

    //215. Kth Largest Element in an Arrayint findKthLargest(vector<int>& nums, int k) {        //默认为大顶堆,等同于 priority_queue<int,vector<int>,less<int>> q;priority_queue<int> q(nums.begin(),nums.end());for(int i=0;i<k-1;i++) q.pop();return q.top();}

相关LeetCode题:

215. Kth Largest Element in an Array  题解

703. Kth Largest Element in a Stream  题解

295. Find Median from Data Stream  题解

将顶部节点一一取出,即可实现堆排序,例如经典的题目 23. Merge k Sorted Lists,用优先级队列求解时间复杂度为O(nlogk),n为总元素数、k为list数,可视化堆排序

相关LeetCode题:

23. Merge k Sorted Lists  题解

自定义优先级

对于优先级队列,我们可以自定义优先级判断标准,比如按元素频次、距离、成本等。这时我们需要自定义优先级队列的比较方式:

    struct compare{bool operator()(const pair<char,int> a,const pair<char,int> b){return b.second > a.second;}  };//priority_queue<Type, Container, Functional>priority_queue<pair<char,int>,vector<pair<char,int>>,compare> pq;

相关LeetCode题:

451. Sort Characters By Frequency  题解

347. Top K Frequent Elements  题解

692. Top K Frequent Words  题解

973. K Closest Points to Origin  题解

767. Reorganize String  题解

优先级队列与贪心

由优先级队列可方便地取得极值,而极值本身体现了贪心(Greedy)的思想;在用到贪心思路解题时,可以考虑借助优先级队列获取极值。

相关LeetCode题:

1046. Last Stone Weight  题解

253. Meeting Rooms II  题解

871. Minimum Number of Refueling Stops  题解

502. IPO  题解

358. Rearrange String k Distance Apart  题解

优先级队列与BFS

在 算法与数据结构基础 - 队列(Queue) 介绍了常用队列模拟广度优先搜索(BFS)过程,优先级队列作为特殊的队列,同样可以用于BFS、以实现对临近节点按优先级搜索。

相关LeetCode题:

778. Swim in Rising Water  题解

407. Trapping Rain Water II  题解

转载于:https://www.cnblogs.com/bangerlee/p/11205539.html

算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)相关推荐

  1. codeforces 贪心+优先队列_算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)...

    堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值:

  2. 【STL学习】优先级队列Priority Queue详解与C++编程实现

    优先级队列Priority Queue介绍 优先级队列是一个拥有权值观念的queue.它允许在底端添加元素.在顶端去除元素.删除元素. 优先级队列内部的元素并不是按照添加的顺序排列,而是自动依照元素的 ...

  3. 优先级队列(Priority Queue)

    优先级队列(Priority Queue) 注:队列是一种特征为FIFO的数据结构,每次从队列中取出的是最早加入队列中的元素.但是,许多应用需要另一种队列,每次从队列中取出的应是具有最高优先权的元素, ...

  4. 什么是java优先级队列_什么是Java优先级队列(Priority Queue)?

    39 优先级队列中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索.无论何时调用remove方法,总会获得当前优先级队列中的最小元素,但并不是对所有元素都排序.它是采用了堆(一个可以自我调整 ...

  5. 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记

    一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...

  6. asp子窗口读取父窗口数据_算法与数据结构基础 - 数组(Array)

    数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺 ...

  7. 由任意二叉树的前序遍历序列和中序遍历序列求二叉树的思想方法_算法与数据结构基础 - 二叉树(Binary Tree)...

    二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...

  8. 数据结构,堆和栈和队列的概念

    数据结构,堆和栈和队列的概念 1 什么是数据结构 数据结构是计算机存储,组织数据的反复改.数据结构是指相互之间存在的一种或多种特定关系的数据元素集合. 2 数据结构的逻辑结构 1 集合结构,元素都是孤 ...

  9. 数据结构之堆Heap

    1. 概述 堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆).它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等. 2. 堆 ...

最新文章

  1. webwork 标签 基本用法 例子
  2. [js] for in 和 for of 的区别?
  3. PowerShell 方式部署Sharepoint Solution
  4. 30-40岁的程序员们,请把一些账算清楚,为过冬做准备(一)
  5. 1.Docket 安装简介
  6. vue项目下,webpack.js/package.json配置
  7. dlna 斐讯r1怎么用_挽救智障——斐讯R1:固件升级、安装DLNA和Soundwire
  8. tp1900芯片对比7621a_MT7621A和MT7620A两个芯片各有什么特点?
  9. FreeSWITCH折腾笔记9——使用FS做一个i-SBC
  10. 养生粥秘方,据说可以补气、泻火和去湿
  11. 使用pyinstaller打包.py文件生成.exe文件
  12. 如何通过三视图判断立方体个数_“三视图”“小正方体个数”一篇搞定!
  13. 傅里叶变换和逆变换公式的我理解意义
  14. java 对接中国银联 云闪付
  15. HTML+CSS仿写京东登陆页面附代码(web前端期末大作业)
  16. 在c++中关于堆和堆栈的区别
  17. windows使用命令执行exe文件
  18. 微信小程序实战十:搜索列表的实现
  19. php wscript.shell组件,wscript.shell × 命令行执行组件
  20. CD4017 十进制计数器工作原理及应用大全(不断更新中......)

热门文章

  1. MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
  2. Python基础-闭包
  3. P2280 [HNOI2003]激光炸弹
  4. jQuery 图片轮流展示效果
  5. Angstrom移植操作
  6. python list转map_Python 进阶之术 Map Filter Reduce
  7. 【20171025中】alert(1) to win 脚本渲染自建
  8. SELinux深入理解
  9. 二值形态学操作、图像的边缘检测、图像编码
  10. 1.关于python