当前位置: 首页 > news >正文

栈-946.验证栈序列-力扣(LeetCode)

一、题目解析

1、判断push和pop的序列是否符合poped

2、poped的长度和pushed相同

3、pushed中没有重复元素

二、算法原理

相信大多数读者在学习栈这个数据结构时,肯定接触过类似的题目:判断下面序列能通过push和pop得到?而今天这道题就是把我们平时做题时在纸上或者在大脑中推演的过程用代码实现,并判断

解法:栈模拟

这里不一定要用栈来实现,这里可以用vector来实现一个简单的栈,通过vector的back()达到栈的top()的效果

想了解更多相关知识,可以自行访问查询

链接:cplusplus.com - The C++ Resources Network

模拟过程:

1、在入栈后,先判断入栈的元素是否等于poped中的元素(通过维护一个下标索引来遍历poped)

2、如果相等,则执行出栈操作,加加poped的下标索引。但我们出栈操作可能是需要重复的,所以这里是一个循环

3、如果不相等,则继续入栈

4、如果符合栈序列,则栈内元素为空,反之不为空,所以我们将栈的元素是否为空作为返回结果,记得取反哦(取反是用vector模拟栈需要取反,如果直接使用栈empty()无需取反)

vector模拟取反是因为,返回的是size(),如果为空,则size=0,0为false,非0为true,所以需要取反;empty()如果为空,则返回true,反之为false

三、代码示例

class Solution {
public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped){vector<int> num;int  i = 0, j = 0;for (int i = 0; i < pushed.size(); i++){num.push_back(pushed[i]);//模拟入栈if (num.back() == popped[j]){while (num.size() && num.back() == popped[j])//模拟连续出栈{num.pop_back();j++;}}}return !num.size();//如果符合,则栈为空,数量为0,否则栈不为空}
};

看到最后,如果对您有所帮助,还请点赞、收藏和关注一键三连,在未来还会继续带来优秀的内容,感谢观看,我们下期再见!

http://www.dtcms.com/a/389027.html

相关文章:

  • spring boot3.0整合rabbitmq3.13
  • Scrapy爬虫利器:CrawlSpider详解
  • 从零开始学Flink:数据源
  • GRPO算法复现
  • AI+Flask博客项目实战提示词笔记 20250918
  • 无人设备遥控器之时间戳技术篇
  • 模块四 展望微服务
  • RN 添加 <NavigationContainer>组件报错
  • 深入理解 AVL 树
  • 软考中级习题与解答——第八章_计算机网络(2)
  • FinalShell远程连接CentOS下方文件列表信息不显示且刷新报空指针异常
  • 贪心算法应用:线性规划贪心舍入问题详解
  • 设计模式学习笔记(二)
  • 轻量化录屏插件,MP4输出格式
  • 静态代理 设计模式
  • Salesforce知识点:触发器:自动化业务逻辑的核心工具详解
  • CentOS 8.5部署Zabbix6.0 agent2端
  • 【TestCenter】设置DHCP Option
  • Jenkins 安全清理孤立工作区(workspace)的 Shell 脚本:原理、实现与实战
  • WebDancer论文阅读
  • Node.js、npm 和 npx:前端开发的三剑客
  • Node.js 创建 UDP 服务
  • 【NodeJS 二维码】node.js 怎样读取二维码信息?
  • IRN论文阅读笔记
  • pacote:Node.js 生态中的包获取工具
  • 使用 Ansible 管理 Docker 容器:开关机、定时开关机及 VNC 控制
  • 【Spring AI】实现一个基于 Streamable HTTP 的 MCP Server
  • 云手机:概念、历史、内容与发展战略
  • linux服务器上安装oss对象存储(命令行工具使用oss)
  • 强化学习1.1 使用Gymnasium库