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

LeetCode - 946. 验证栈序列

题目

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

这道题是验证栈序列,我们需要判断一个序列是否可能是另一个序列的入栈出栈结果。看到这个问题,我首先想到的是模拟栈的操作过程。

我的思路是这样的:

  1. 创建一个栈来模拟入栈出栈的过程
  2. 遍历pushed序列,将元素依次入栈
  3. 每次入栈后,检查栈顶元素是否与popped序列的当前元素匹配
  4. 如果匹配,就将栈顶元素弹出,并移动popped序列的指针
  5. 继续这个过程,直到处理完pushed序列
  6. 最后检查栈是否为空,如果为空,说明序列有效

举个例子,以示例1为例:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]

  • 将1入栈,栈变成[1],检查栈顶1是否等于popped[0]=4,不等,继续
  • 将2入栈,栈变成[1,2],检查栈顶2是否等于popped[0]=4,不等,继续
  • 将3入栈,栈变成[1,2,3],检查栈顶3是否等于popped[0]=4,不等,继续
  • 将4入栈,栈变成[1,2,3,4],检查栈顶4是否等于popped[0]=4,相等,弹出4,popped指针移动到5
  • 将5入栈,栈变成[1,2,3,5],检查栈顶5是否等于popped[1]=5,相等,弹出5,popped指针移动到3
  • pushed序列已经遍历完,但popped序列还有元素,继续检查栈顶
  • 栈顶3等于popped[2]=3,弹出3,popped指针移动到2
  • 栈顶2等于popped[3]=2,弹出2,popped指针移动到1
  • 栈顶1等于popped[4]=1,弹出1,popped指针移动到末尾
  • 栈为空,popped序列也处理完了,返回true

对于示例2:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]

  • 按照同样的过程模拟,会发现在某一步骤,栈顶元素与popped序列的当前元素不匹配,且pushed序列已经遍历完,无法继续入栈,此时返回false

这种方法的时间复杂度是O(n),其中n是序列的长度,因为我们只需要遍历一次pushed和popped序列。空间复杂度是O(n),主要是栈的空间。

这道题考察的是对栈这种数据结构的理解,以及如何通过模拟操作来验证序列的合法性。在实际编码中,我会注意处理边界情况,比如空序列或长度不匹配的序列

class Solution {
public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {stack<int> st;int popStr = 0;for(auto e : pushed){st.push(e);while(st.size() && st.top() == popped[popStr]){st.pop();popStr++;}}return st.empty();}
};
http://www.dtcms.com/a/351276.html

相关文章:

  • 智慧园区:从技术赋能到价值重构,解锁园区运营新范式
  • 透视光合组织大会:算力生态重构金融AI落地新实践
  • 亚马逊类目合规风暴:高压清洗机品类整顿背后的运营重构与风险防御
  • 便携屏选购指南:常见作用、移动性优势及多场景应用详解
  • 前端性能优化新维度:渲染流水线深度解析
  • 【前端开发实战】从零开始开发Chrome浏览器扩展 - 快乐传播者项目完整教程
  • DeepSeek分析
  • spring如何通过实现BeanPostProcessor接口计算并打印每一个bean的加载耗时
  • 【数据结构】树和二叉树——二叉树
  • pytorch_grad_cam 库学习笔记—— Ablation-CAM 算法的基类 AblationCAM 和 AblationLayer
  • OneCode RAD:揭秘前端开发的配置化魔法
  • 【RAGFlow代码详解-14】知识图谱处理
  • Linux之SELinux 概述、SSH 密钥登录、服务器初始化
  • IUV5G专网排障(下)
  • 开源大模型本地部署
  • [Mysql数据库] 知识点总结3
  • 基于Android的电影院订票选座系统、基于Android的电影院管理系统app#基于Android的电影在线订票系统
  • 玩转QEMU硬件模拟器 - vexpress-a9开发板模拟开发
  • 深入浅出理解支持向量机:从原理到应用,解锁分类算法的核心密码
  • 宝石组合(蓝桥杯)
  • UX 设计入门终章:让洞察落地!用用户流程图、IA 和旅程图,设计用户与产品的互动故事
  • 介绍一下 bev fusion 网络结构
  • 微服务-27.配置管理-什么是配置管理
  • FULL OUTER JOIN 的作用与使用场景(检查表与表是否存在不同记录)
  • UML 时序图中交互片段操作符的详细解析与 C/C++ 实现示例
  • 五、VSCODE SSH连接linux服务器免密登录
  • Java中 0.05 + 0.01 ≠ 0.06 揭秘浮点数精度陷阱
  • VSCode: 从插件安装到配置,如何实现 Ctrl+S 保存时,完全按照 .eslintrc.js 中的 ESLint 规则自动格式化代码
  • vscode 配置 + androidStudio配置
  • Easy Voice Recorder Pro v2.9.3 简单易用的专业音频录制工具应用