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

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.xdnf.cn/news/18793.html

相关文章:

  • Linux-孤儿进程和僵死进程
  • mysql是怎样运行的(梳理)
  • Python包管理与安装机制详解
  • EasyExcel 3.x 导出动态表头,动态sheet页
  • Rust:函数与控制流
  • 《Java反射与动态代理详解:从原理到实践》
  • 【Ansible】Ansible部署K8s集群--准备环境--配置网络
  • PEFT 模型解析(59)
  • 《数据之心》——鱼小妖的觉醒
  • ctfshow_萌新web16-web20-----文件包含日志注入
  • 《信息检索与论文写作》实验报告二 引文索引数据库检索
  • 我们来学mysql -- safe启动
  • 解析xml文件并录入数据库
  • 类似ant design和element ui的八大Vue的UI框架详解优雅草卓伊凡
  • Vue中的scoped属性
  • 推荐系统王树森(三)粗排精排
  • 【NER学习笔记】:基于AdaSeq的NER模型训练笔记
  • Linux下TCPT通信
  • 8.26 支持向量机
  • 什么样的 IP 能穿越周期,持续被用户买单?​
  • 基于大模型的智能占卜系统实战-Qwen-VL、RAG、FastAPI
  • “喵汪联盟”宠物领养系统的设计与实现(代码+数据库+LW)
  • Python编程快速上手—让繁琐工作自动化
  • OpenCV打开视频函数VideoCapture使用详解
  • 数据与端点安全 (Protect data and apps)
  • 【学习笔记】系统时间跳变会影响time接口解决措施
  • Matlab使用——开发上位机APP,通过串口显示来自单片机的电压电流曲线,实现光伏I-V特性监测的设计
  • es-toolkit 是一个现代的 JavaScript 实用库
  • UE4生成Target文件
  • 【RAGFlow代码详解-11】知识库管理