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

前言

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


一、结构基础

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.mfbz.cn/a/780001.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测

SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现BO-Transformer-BiLSTM时间序列预测&#xff0c;贝叶斯优化Transfor…

C++_STL---list

list的相关介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 list的底层是带头双向循环链表结构&#xff0c;链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素。…

WAIC | 上海人形机器人创新中心 | 最新演讲 | 详细整理

前言 笔者看了7月4号的人形机器人与具身智能发展论坛的直播&#xff0c;并在7月5日到了上海WAIC展会现场参观。这次大会的举办很有意义&#xff0c;听并看了各家的最新成果&#xff0c;拍了很多照片视频&#xff0c;部分演讲也录屏了在重复观看学习 稍后会相继整理创立穹彻智…

[c++] 可变参数模版

前言 可变参数模板是C11及之后才开始使用,学校的老古董编译器不一定能用 相信大家在刚入门c/c时都接触过printf函数 int printf ( const char * format, ... ); printf用于将数据格式化输出到屏幕上,它的参数非常有意思,可以支持任意数量,任意类型的多参数.而如果我们想实现类…

【Java探索之旅】继承概念_语法_父类的成员访问

文章目录 &#x1f4d1;前言一、继承1.1 继承的概念1.2 继承语法1.3 继承发生后 二、父类的访问2.1 父类成员变量访问2.2 父类成员方法访问 &#x1f324;️全篇总结 &#x1f4d1;前言 在面向对象编程中&#xff0c;继承是一种重要的概念&#xff0c;它允许我们创建一个类&…

[go-zero] 简单微服务调用

文章目录 1.注意事项2.服务划分及创建2.1 用户微服务2.2 订单微服务 3.启动服务3.1 etcd 服务启动3.2 微服务启动3.3 测试访问 1.注意事项 go-zero微服务的注册中心默认使用的是Etcd。 本小节将以一个订单服务调用用户服务来简单演示一下&#xff0c;其实订单服务是api服务&a…

VSCode设置好看清晰的字体!中文用鸿蒙,英文用Jetbrains Mono

一、中文字体——HarmonyOS Sans SC 1、下载字体 官网地址&#xff1a;https://developer.huawei.com/consumer/cn/design/resource/ 直接下载&#xff1a;https://communityfile-drcn.op.dbankcloud.cn/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20230517…

昇思25天学习打卡营第18天 | K近邻算法实现红酒聚类

1、实验目的 了解KNN的基本概念&#xff1b;了解如何使用MindSpore进行KNN实验。 2、K近邻算法原理介绍 K近邻算法&#xff08;K-Nearest-Neighbor, KNN&#xff09;是一种用于分类和回归的非参数统计方法&#xff0c;最初由 Cover和Hart于1968年提出(Cover等人,1967)&#…

Golang | Leetcode Golang题解之第220题存在重复元素III

题目&#xff1a; 题解&#xff1a; func getID(x, w int) int {if x > 0 {return x / w}return (x1)/w - 1 }func containsNearbyAlmostDuplicate(nums []int, k, t int) bool {mp : map[int]int{}for i, x : range nums {id : getID(x, t1)if _, has : mp[id]; has {retu…

ctfshow web sql注入 web242--web249

web242 into outfile 的使用 SELECT ... INTO OUTFILE file_name[CHARACTER SET charset_name][export_options]export_options:[{FIELDS | COLUMNS}[TERMINATED BY string]//分隔符[[OPTIONALLY] ENCLOSED BY char][ESCAPED BY char]][LINES[STARTING BY string][TERMINATED…

【三级等保】等保整体建设方案(Word原件)

建设要点目录&#xff1a; 1、系统定级与安全域 2、实施方案设计 3、安全防护体系建设规划 软件全文档&#xff0c;全方案获取方式&#xff1a;本文末个人名片直接获取。

数据结构——二叉树相关题目

1.寻找二叉树中数值为x的节点 //寻找二叉树中数值为x的节点 BTNode* TreeFind(BTNode* root, BTDataType x)//传过来二叉树的地址和根的地址&#xff0c;以及需要查找的数据 {if (root Null){return Null;}//首先需要先判断这个树是否为空&#xff0c;如果为空直接返回空if (…

基于python的数据分解-趋势-季节性-波动变化

系列文章目录 前言 时间序列数据的分解&#xff0c;一般分为趋势项&#xff0c;季节变化项和随机波动项。可以基于加法或者乘法模型。季节变化呈现出周期变化&#xff0c;因此也叫季节效应(周期&#xff09;。 一、数据分解步骤 &#xff08;1&#xff09;估计时间序列的长期…

拓扑排序,PageRank(markov),实对称矩阵等

拓扑排序 多件事情有先后顺序&#xff0c;如何判断哪个先哪个后 拓扑排序算法&#xff1a; 1.读入图时&#xff0c;需要记录每个顶点的入度&#xff0c;以及相邻的所有顶点 2.将入度为0的顶点入队&#xff08;先进先出&#xff09; 3.取出队首元素a&#xff0c;&#xf…

rocketmq-console可视化界面功能说明

rocketmq-console可视化界面功能说明 登录界面OPS(运维)Dashboard(驾驶舱)Cluster(集群)Topic(主题)Consumer(消费者)Producer(生产者)Message(消息)MessageTrace(消息轨迹) rocketmq-console是rocketmq的一款可视化工具&#xff0c;提供了mq的使用详情等功能。 本章针对于rock…

基于springboot+vue+uniapp的高校宿舍信息管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

springboot + mybatis 多数据源切换

参考的b站博主写的 配置文件: spring:datasource:db1:jdbc-url: jdbc:mysql://localhost:3306/interview_database?useUnicodetrue&characterEncodingutf-8&useSSLfalseusername: rootpassword: 12345driver-class-name: com.mysql.cj.jdbc.Driverdb2:jdbc-url: jdbc…

rancher管理多个集群

一、rancher部署 单独部署到一台机器上&#xff0c;及独立于k8s集群之外&#xff1a; 删除所有yum源&#xff0c;重新建yum源&#xff1a; # 建centos7.9的yum源 # cat CentOS-Base.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the …

花所Flower非小号排名20名下载花所Flower

1、Flower花所介绍 Flower花所是一家新兴的数字货币交易平台&#xff0c;致力于为全球用户提供安全、便捷的交易体验。平台以其强大的技术支持和丰富的交易产品闻名&#xff0c;为用户提供多样化的数字资产交易服务&#xff0c;涵盖了主流和新兴数字货币的交易需求。 2. Flowe…

wordpress企业网站模板免费下载

大气上档次的wordpress企业模板&#xff0c;可以直接免费下载&#xff0c;连注册都不需要&#xff0c;网盘就可以直接下载&#xff0c;是不是嘎嘎给力呢 演示 https://www.jianzhanpress.com/?p5857 下载 链接: https://pan.baidu.com/s/1et7uMYd6--NJEWx-srMG1Q 提取码:…