算法力扣刷题总结篇 ——【四】

前言

栈和队列篇题目学习结束。
总结:


一、结构基础

stack类

(1)使用栈(后入先出)的结构时,用它。

(2)容器适配器(container adaptor)。本身不算容器,和vector不是一类,但是底层实现使用容器(比如deque、list、vector),对底层的容器结构封装接口,所以叫容器适配器。

(3)哪些容器可以作为stack类的底层?

  • 答:外部看着一个栈,只有一个开口,就是“栈顶”。在底层的容器其实是容器的“back”尾部,作为开口,当作栈顶。如果容器类有:empty、size、push_back、pop_back、back的功能,能获取到最后一个元素,就可以作为stack的底层。
  • 比如:vector、deque、list。默认是deque。
  • 所以stack内的元素不一定是连续存放的:如果是vector,那么是连续存放;如果是deque,不是严格连续存放;如果是list,链表就不是连续存放。(连续存放指内存连续一片)

(4)stack类模版的定义:

template <class T, class Container = deque > class stack;
先指定元素类型,再指定底层容器类型。

(5)因为stack是封装底层类,所以成员函数不算多,也不提供iterator。

  • 构造函数:

    • 不带参数,构造空栈。stack< int > st;
    • 用vector、deque、list对象直接初始化。比如:vector< int > nums= {1,3,2}; stack<int,vector< int >> st(nums);
  • empty()

    • 无参数、返回bool。空,返回true;不空,返回false。
  • size()

    • 无参数,返回size_type,无符号整数。获取大小。
  • top()

    • 无参数,返回栈顶元素的引用。
    • 其实是call 底层容器的back()函数。
  • push()

    • 有参数,push的对象,只能一个参数。没有返回值。
    • 其实是call 底层容器的push_back()函数。
  • pop()

    • 无参数,无返回值。弹出栈顶。
    • 其实是call 底层容器的pop_back()函数。
  • emplace()

    • 有参数,也是往栈里压入元素操作。但是元素的构造是依靠emplace传参给元素类型的构造函数。没有返回值。
    • 和push操作一样。但是区别:push的参数是已经创建好的对象,进行copy;emplace的参数是要传给元素类型的构造函数,还没有创建对象。
    • 其实是call 底层容器的emplace_back()函数。
  • swap()

    • 有参数,类型和调用者一样,同类型的栈。交换栈的内容,没有返回值。
    • 和非成员函数重载的 swap()传两个参数一个意思。

(6)关系运算符:!= 、==、<、>、<=、>= 重载。比较两个栈。

  • 其实是call 底层容器的重载元素符操作。

queue类

#include < queue > 头文件中有两个类:queue和priority_queue。
这里说queue:
(1)和stack原理一样:容器适配器;

(2)操作:先入先出。FIFO。

(3)所以是两端开口,那么底层容器的功能:empty、size、push_back、pop_front、back、front。比如:deque和list满足。vector不满足。默认deque。

(4)queue类模版定义:

template <class T, class Container = deque > class queue;

(5)成员函数:

  • stack(5)中queue都有。除了top()。
  • top()换成front()和back()。

(6)关系元素符重载同理。


priority_queue类

本质实现一个堆结构,默认是最大堆。但披着队列的外皮。具体详解和使用——此链接
(1)成员函数:同stack。
(2)没有关系运算符。
(3)容器适配器,需要有:empty、size、front、push_back、pop_back。比如:vector和deque满足,list不满足。默认是vector。
(4)重点是定义:

template <class T, class Container = vector, class Compare = less > class priority_queue;
如果想要实现最小堆,就得改变Compare。自定义比较函数。
自定义比较函数:用一个类Mycmp重载()运算符。参数是元素类型,返回bool。


二、题目回顾

总结题目参考链接

(1)二十七【232.用栈实现队列】 两个栈。当stack2为空,才触发一次把stack1中元素全部pop放入stack2。所以push只需要stack1,pop只需要stack2,但要先判断空否?
(2)二十八【225. 用队列实现栈】 一个队列就可以。push只管push,pop时候,把除最后一个元素外前面所有的“阻碍”,都再重新入队。
(3)栈结构操作:

  • 二十九【20. 有效的括号】 两种方法
    • 参考给的方法:如果遇到左括号,把对应的右括号压入栈中;如果遇到右括号,判断栈里面有没有元素?(右括号多余);栈顶元素是不是该右括号?(嵌套顺序);等遍历结束,栈是不是空?(左括号多余)。
    • 尝试实现的方法:如果遇到左括号,把左括号压入栈中;如果遇到右括号,如果栈为空:说明右括号多余(false);如果栈顶元素不是对应左括号,说明嵌套顺序错误;如果遍历结束,栈不为空,说明左括号多余。
  • 三十【1047. 删除字符串中的所有相邻重复项】 类似“消消乐”,判断当前元素是否和栈顶元素相同,如果相同,弹出栈顶元素。
  • 三十一【150. 逆波兰表达式求值】 后缀表达式符合计算机的思路。遇到数字压入栈中,遇到运算符,取出栈顶两个数字计算之后,把结果压入栈中。
  • 三十四【71.简化路径】 明显用栈结构。但是构造的栈结构只放有效的文件名。最后pop文件名再处理间隔“/”。为了统一获得文件名,不在最后没有“/”出问题,先对path末尾加“/”。

(4)队列结构操作:

  • 三十二【239. 滑动窗口最大值】 自定义单调队列。用deque结构。如果进入窗口的元素,在此之前没有比它大的,全部pop卷走,让最大的值占据队列出口。当然第一步要放入第一个窗口内的元素。如果pop参数不是最大值,不操作pop。
  • 三十三【347.前 K 个高频元素】 用priority_queue结构。构造最小堆。

总结

开启下一篇【二叉树】。

(欢迎指正,转载表明出处)

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

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

相关文章

550kg级大载重长航时无人机直升机技术详解

550kg级大载重长航时无人机直升机&#xff0c;作为一种高性能的无人机系统&#xff0c;具备了多项先进的技术特点&#xff0c;以满足高海拔、高寒等复杂环境下的应用需求。这些无人机直升机通常具备高载重、长航时、强适应性、高可靠性和良好的任务拓展性。 设备由无人直升机平…

【面试八股文】java基础知识

引言 本文是java面试时的一些常见知识点总结归纳和一些拓展&#xff0c;笔者在学习这些内容时&#xff0c;特地整理记录下来&#xff0c;以供大家学习共勉。 一、数据类型 1.1 为什么要设计封装类&#xff0c;Integer和int区别是什么&#xff1f; 使用封装类的目的 对象化:…

数据结构——单链表专题

前言 本篇我们继续来介绍数据结构的知识——链表&#xff0c;这与顺序表是一个类别的知识&#xff0c;同样也非常重要&#xff0c;所以大家需要掌握好链表的内容&#xff0c;这对我们后面数据结构的学习也很重要&#xff0c;如果你对本篇的内容感兴趣&#xff0c;希望大佬可以…

使用RabbitMQ实现可靠的消息传递机制

使用RabbitMQ实现可靠的消息传递机制 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. RabbitMQ简介 RabbitMQ是一个开源的消息代理软件&#xff0c;实现了高级消息队列协议&#xff08;AMQP&…

四大常见的排序算法JAVA

1. 冒泡排序 相邻的元素两两比较&#xff0c;大的放右边&#xff0c;小的放左边 第一轮比较完毕之后&#xff0c;最大值就已经确定&#xff0c;第二轮可以少循环一次&#xff0c;后面以此类推 如果数组中有n个数据&#xff0c;总共我们只要执行n-1轮的代码就可以 package Bu…

mq虚拟主机实现数据隔离

如果一个mq系统需要被多个实际业务系统共用&#xff0c;那么我们需要对于不同的业务系统分设不同的虚拟机进行数据隔离 本文将主要演示如何使用mq的web端进行创建不同虚拟机完成数据隔离 首先我们需要针对新的业务系统创建一个专属的用户&#xff0c;并赋予admin权限&#xf…

【matlab】状态空间模型与传递函数模型的建立与转换

目录 SISO系统 MIMO系统 状态空间模型 状态空间模型到传递函数模型的转换 传递函数模型到状态空间模型的转换 (1) 转换函数ss() (2) 规范形转换函数canon() (3) 常微分方程(传递函数)转换为状态空间模型函数dif2ss() 状态空间模型的变换 特征值、特征向量与广义特征向量的计算…

everything高级搜索-cnblog

everything高级搜索用法 基础4选项验证 总结搜索方式 高级搜索搜指定路径文件名: 文件名 路径不含文件名: &#xff01;文件名包含单词 路径包含指定内容: 路径 content:内容 大小写 区分大小写搜索搜指定路径文件名: case:文件名 路径全字匹配 全字搜指定路径文件名: wholewo…

力扣刷题--908. 最小差值 I【简单】

题目描述 给你一个整数数组 nums&#xff0c;和一个整数 k 。 在一个操作中&#xff0c;您可以选择 0 < i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] x &#xff0c;其中 x 是一个范围为 [-k, k] 的整数。对于每个索引 i &#xff0c;最多 只能 应用 一次…

中霖教育:二级建造师未注册还需要继续教育吗?

关键词&#xff1a;中霖教育怎么样&#xff0c;中霖教育口碑 如果通过了二级建造师考试但是没有注册&#xff0c;还用继续教育吗? 1. 未注册的二级建造师 二级建造师在其证书获取后三年内没有进行注册时&#xff0c;在申请初始注册之前必须完成规定的本专业继续教育课程。 …

ubuntu运行qq音乐闪退

ubuntu运行qq音乐闪退 修改/usr/share/applications中的qqmusic.desktop&#xff0c;在Exec后加上 --no-sandbox,如下图所示&#xff1a; 该文件有可能是只读&#xff0c;权限不够的话用sudo vim qqmusic.desktop

java项目的一些功能(完善登录功能、注册接口参数校验、完善分页查询、完善日期格式、更新文章分类和添加文章分类的分组校验、自定义校验、文件上传 )

目录 完善登录功能 注册接口参数校验 完善分页查询 完善日期格式 更新文章分类和添加文章分类的分组校验 ​编辑 自定义校验 文件上传 完善登录功能 对前端传过来的明文密码进行md5加密处理 password DigestUtils.md5DigestAsHex(password.getBytes()); 这样既可 注…

Python数据分析案例50——基于EEMD-LSTM的石油价格预测

案例背景 很久没更新时间序列预测有关的东西了。 之前写了很多CNN-LSTM&#xff0c;GRU-attention&#xff0c;这种神经网络之内的不同模型的缝合&#xff0c;现在写一个模态分解算法和神经网络的缝合。 虽然eemd-lstm已经在学术界被做烂了&#xff0c;但是还是很多新手小白或…

驾校管理系统的全面革新与升级

智慧驾校系统是一款专为现代驾校量身定制的综合性管理平台,它深度融合了云计算、大数据、物联网及人工智能等前沿技术,旨在为驾校打造一个高效、智能、便捷的运营生态系统。该系统通过数字化、信息化的手段,彻底革新了传统驾校的管理模式,不仅极大地提升了驾校的运营效率,…

Open3D 点云CPD算法配准(粗配准)

目录 一、概述 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2配准后点云 一、概述 在Open3D中&#xff0c;CPD&#xff08;Coherent Point Drift&#xff0c;一致性点漂移&#xff09;算法是一种经典的点云配准方法&#xff0c;适用于无序点云的非…

ECMAScript 6 新特性上篇

一、什么是ECMAScript ECMAScript(简写为ES)是一种基于标准化的脚本语言,用于在Web浏览器中编写交互式和动态的网页。它是由Ecma国际组织(以前称为欧洲计算机制造商协会)定义和标准化的。ECMAScript定义了语法、类型、控制结构、内置对象等方面的规范,使得不同的浏览器和…

【漏洞复现】宏景eHR LoadOtherTreeServlet SQL注入漏洞

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合&#xff0c;满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR LoadOtherTreeServlet接口处存在SQL注入漏洞&#xff0c;未经身份验证的远程攻击者除了可以利用 SQL 注入漏…

C++期末综合练习

id:159 A. 音像制品&#xff08;类与对象&#xff09; 题目描述 某商店出租音像制品&#xff0c;制品信息包括&#xff1a;类型、名称、租金单价、状态。 其中类型用单个数字表示&#xff0c;对应关系为&#xff1a;1-黑胶片&#xff0c;2-CD&#xff0c;3-VCD&#xff0c;4-…

孩子很内向,是不是自闭症?

作为星启帆寄宿制自闭症学校的老师&#xff0c;我深知内向与自闭症之间存在着本质的区别&#xff0c;尽管两者在社交表现上可能有一定的相似性。 首先&#xff0c;内向是一种性格特质&#xff0c;表现为个体在社交场合中相对安静、羞涩&#xff0c;更喜欢独处或与小范围的人交往…

Webpack: Loader开发 (1)

概述 如何扩展 Webpack&#xff1f;有两种主流方式&#xff0c;一是 Loader —— 主要负责将资源内容翻译成 Webpack 能够理解、处理的 JavaScript 代码&#xff1b;二是 Plugin —— 深度介入 Webpack 构建过程&#xff0c;重塑 构建逻辑。 相对而言&#xff0c;Loader 的职责…