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

堆基础

堆(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++静态数据成员和静态成员函数

在C面向对象编程过程当中&#xff0c;对象与对象之间的数据不是共享&#xff0c;在设计类的时候&#xff0c;有时候需要一些对象之间共享的数据&#xff0c;除了把所要共享的数据设置为全局数据或者函数之外&#xff0c;还可以利用C的静态机制。 1、静态数据成员 class 类名 {…

带有AOP和注释的Java方法记录

有时&#xff0c;我想记录&#xff08;通过slf4j和log4j &#xff09;方法的每次执行&#xff0c;查看其接收的参数&#xff0c;返回的内容以及每次执行需要多少时间。 这是我在AspectJ &#xff0c; jcabi-aspects和Java 6注释的帮助下进行的操作&#xff1a; public class F…

JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】

什么是JDBC JDBC全称为&#xff1a;Java Data Base Connectivity,它是可以执行SQL语句的Java API 为什么我们要用JDBC 市面上有非常多的数据库&#xff0c;本来我们是需要根据不同的数据库学习不同的API&#xff0c;sun公司为了简化这个操作&#xff0c;定义了JDBC API【接口…

mysql binlog空间维护

默认情况下&#xff0c;mysql主从同步的binlog日志&#xff0c;会一直保存。 对于如果已同步好的数据&#xff0c;这显然比较浪费资源。 且如果生产环境磁盘太小&#xff0c;随时还会爆掉&#xff0c;所以很有必要作好binlog的空间维护。 以下操作&#xff0c;直接在master上操…

UVA 10604 Chemical Reaction

UVA_10604 一开始看错题了&#xff0c;以为化学物质最多会有10个&#xff0c;所以定义不了10维的去跑&#xff0c;便用了类似状态压缩的方式&#xff0c;把化学物质的状态压缩成一个整数&#xff0c;然后用哈希表建立一个索引&#xff0c;再用记忆化搜素去处理就可以了。 之所以…

一键发布到Maven Central的方法

当我向Maven Central发布Java开源库jcabi-aspects的新版本时&#xff0c;我花费了30秒钟的时间。 甚至更少。 最近&#xff0c;我发布了0.17.2版本。 您可以在Github第80期中看到所有情况&#xff1a; 如您所见&#xff0c;我向Rultor发出了命令&#xff0c;它向Maven Central…

vue组件详解(一)——组件与复用

一、什么是组件 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素&#xff0c;封装可重用的代码。 二、组件用法 组件需要注册后才可以使用&#xff0c;注册有全局注册和局部注册两种方式。 2.1 全局注册后&#xff0c;任何V ue 实例都可以使用。如&am…

fatal error LNK1120: 1 unresolved externals

出现这个错误可能原因很多&#xff0c;我的问题是来自于把template写在了cpp文件中template 有弊端 就是 他的实现部分必须和声明部分在一起 你声明在一个头文件 定义在另一个头文件 编译器好笨!!!!!!!!!,它根本就找不到 ///只要你把实现部分拷贝到你声明的头文件,就没有错…

sed命令学习

sed编辑器&#xff0c;处理文本过程如下&#xff1a; sed把当前处理的行保存在一个临时缓冲区中&#xff0c;然后处理缓冲区中的行&#xff0c;完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除&#xff0c;然后下一行读入&#xff0c;处理和显示。处理完输入…

在Spring Boot应用程序中测试邮件代码

在构建Spring Boot应用程序时&#xff0c;您可能会需要添加邮件配置。 实际上&#xff0c;在Spring Boot中配置邮件与在Spring Bootless应用程序中配置邮件没有太大区别。 但是&#xff0c;如何测试邮件配置和提交工作正常&#xff1f; 我们来看一下。 我假设我们有一个引导的…

CSS基础语法(三) CSS的6种特性

样式表常用写法及特性&#xff08;组合、继承、关联性、权值性、层叠性、重要性&#xff09; 1.样式的组合&#xff1a;把具有相同声明定义的选择符组合在一起&#xff0c;并用逗号隔开。&#xff0d;例如&#xff1a;段落元素p、单元格元素td和类c1可以使用相同样式&#xff…

卷积,DFT,FFT,图像FFT,FIR 和 IIR 的物理意义

卷积&#xff1a; 冲击信号会对线性系统产生冲击响应。 冲击信号可分解为平移度和幅度。其对线性系统的冲击响应可以分解为点点间的经平移和缩放的各个冲击响应的累加&#xff0c;通过卷积的表达式表示。 所谓的冲击响应&#xff0c;就是线性系统对任何输入信号的响应&#xff…

洛谷P2822 组合数问题

分析&#xff1a; 首先预处理出来&#xff0c;杨辉三角二维前缀和 代码&#xff1a; #include<cstdio> using namespace std; long long f[2005][2005],sum[2005][2005]; int main() {long long T,k;scanf("%lld%lld",&T,&k);for(long long i0;i<20…

es6笔记

es6对象浅复制&#xff1a; 字符串大小比较&#xff1a; 如果是汉字&#xff1a;a.charCodeAt() > b.charCodeAt() //使用carCodeAt将器转为asci码&#xff0c;在进行比较 如果是非汉字的字符串&#xff1a;直接比较或者使用上面的转码比较都可以。 如果是日期比较&#xff…

毕业设计上线啦!----跳蚤部落与基于Comet的WebIM系统开发

我不清楚把我的毕业设计的东西放上来之后&#xff0c;毕业论文答辩的时候会不会说我是在网上抄袭的&#xff0c;不过我还是果断的发上来与大家分享了&#xff01;&#xff01;呵呵&#xff0c;请大家支持&#xff01;高手就绕道吧&#xff01; 现在已经放到公网上&#xff0c;并…

poj2032Square Carpets(IDA* + dancing links)

题目请戳这里 题目大意:给一个H行W列的01矩阵,求最少用多少个正方形框住所有的1. 题目分析:又是一个红果果的重复覆盖模型.DLX搞之! 枚举矩阵所有的子正方形,全1的话建图.判断全1的时候,用了一个递推,dp[i][j][w][h]表示左上角(i,j)的位置开始长h宽w的矩形中1的个数,这样后面可…

使用Spring Security保护REST服务

总览 最近&#xff0c;我正在一个使用REST服务层与客户端应用程序&#xff08;GWT应用程序&#xff09;进行通信的项目中。 因此&#xff0c;我花了很多时间来弄清楚如何使用Spring Security保护REST服务。 本文介绍了我找到的解决方案&#xff0c;并已实现。 我希望此解决方案…

http请求post,返回excel文件,并接收

1.post的方法里要加responseType: arraybuffer参数&#xff0c;不然下载的excel会乱码 2.使用{type: "application/vnd.ms-excel"}的写法&#xff0c;可以保存为xls格式的excel文件&#xff08;兼容老版本&#xff09;。而使用“application/vnd.openxmlformats-off…

linux图形开发工具

请见:http://hi.baidu.com/jjzhang166/blog/item/b8dfb6ecd5fc6e2d62d09f9e.html 转载于:https://www.cnblogs.com/vilyLei/archive/2011/12/12/2284869.html

具有Overlord的WildFly 8.1中的API管理

昨天&#xff0c;我简要介绍了霸王项目家族。 今天该试驾了。 API管理子项目两天前发布了1.0.0.Alpha1&#xff0c;并根据18个月的路线图介绍了第一组功能。 APIMan到底是什么&#xff1f; 它是一个API管理系统&#xff0c;可以嵌入现有框架或应用程序中&#xff0c;甚至可以作…