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

牛客_JZ31 栈的压入、弹出序列

✨✨ 欢迎大家来到小伞的大讲堂✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

所属专栏:C++_OJ
小伞的主页:xiaosan_blog

栈的压入、弹出序列

栈的压入、弹出序列_牛客题霸_牛客网

描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

1. 0<=pushV.length == popV.length <=1000

2. -1000<=pushV[i]<=1000

3. pushV 的所有数字均不相同

示例1

输入:

[1,2,3,4,5],[4,5,3,2,1]

复制返回值:

true

复制说明:

可以通过push(1)=>push(2)=>push(3)=>push(4)=>pop()=>push(5)=>pop()=>pop()=>pop()=>pop() 这样的顺序得到[4,5,3,2,1]这个序列,返回true

示例2

输入:

[1,2,3,4,5],[4,3,5,1,2]

复制返回值:

false

复制说明:

由于是[1,2,3,4,5]的压入顺序,[4,3,5,1,2]的弹出顺序,要求4,3,5必须在1,2前压入,且1,2不能弹出,但是这样压入的顺序,1又不能在2之前弹出,所以无法形成的,返回false

解题思路

利用辅助栈模拟弹出

压入压入栈的首个元素,在进行判断((s.top() == *it_pop)),如果不等,压入压入栈的下个元素

当((s.top() == *it_pop))等于时

辅助栈栈顶元素出栈,it_pop++指向下一元素,再次进入循环判断,新的辅助栈的栈顶是否与++后的*it_pop的值相等,所以此处应该加入一个判断

这里另起一图,当下一元素与*it_pop相等

返回true的条件,辅助栈最后的元素为NULL,说明与弹出栈匹配

否则为false

#include <iostream>

#include<stack>

class Solution {

public:

bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {

// write code here

stack<int> s;//辅助栈

vector<int>::iterator it_push = pushV.begin();

vector<int>::iterator it_pop = popV.begin();

s.push(*it_push);//插入栈中

while (it_push != pushV.end() && it_pop != popV.end()) {

if(s.top() == *it_pop) {

s.pop();

it_pop++;

if (s.empty() && it_push != pushV.end() && it_pop != popV.end()) {

it_push++;

s.push(*it_push);//插入栈中

}//如果辅助栈为空,但是其余栈并没有完全入栈,则再次进行插入

}else{

it_push++;

s.push(*it_push);//插入栈中

}

}

if (s.empty()) {

return true;

} else {

return false;

}

}

};

http://www.jsqmd.com/news/478579/

相关文章:

  • Slurm高级特性详解:QoS、资源限制与作业优先级配置指南
  • Gorilla网络安全应用:威胁检测API集成与响应自动化完整指南
  • Leetcode_43. 字符串相乘
  • 【C++BFS】690. 员工的重要性
  • 【AutoSAR】只讲干货!使用EB Tresos配置Port
  • 终极指南:Upspin核心架构完全解析——三大服务如何构建全球命名系统
  • 【亲测免费】推荐项目:Dubbo Spring Boot Starter - 简化你的微服务开发
  • 从XML到JSON:Proteus如何革命性重构Android动态布局开发
  • 【亲测免费】 推荐使用:KCloud-Platform-IoT - 超强微服务架构的物联网云平台
  • SpringBoot集成RestTemplate请求高德地图API
  • PyCaret批量预测:处理大规模推理任务的终极指南
  • 排序——快速排序
  • MessagePack-CSharp未来发展方向:终极路线图与功能规划指南
  • 10个终极API安全测试技巧:awesome-web-hacking实战指南
  • 如何使用IPED进行文件类型统计趋势分析:掌握数字证据随时间变化的关键技巧
  • Python枚举类型完全指南:从入门到精通的10个实用技巧
  • 掌握mmdetection模型剪枝技术:通道剪枝与结构剪枝完整指南
  • vue3横向滚动日期选择器组件(Element Plus)
  • 空间函数在 ABAP SQL 里到底是什么
  • 【JEECG】JVxeTable表格行样式错位、底部滚动条错位
  • React组件更新终极指南:从setState到Fiber树的完整解析
  • 搞懂 spatial reference system:为什么 SRID 才是 SAP 空间开发里最容易被低估的基础设施
  • pt转onnx转ncnn模型(yolov8部署安卓)
  • .vscode配置文件备份
  • 搞懂 ABAP 里的 Heap 引用与 Stack 引用:从内存语义到失效边界
  • 解决protobuf版本冲突:从ImportError到streamlit顺利运行的实战指南
  • 【工具-VMware Workstation-ubuntu】
  • ProcessHacker文件锁定检测:解决应用程序文件占用问题
  • pt转onnx转rknn(yolov5部署RK3566)
  • NotebookLM:Google Labs 如何用 AI 重塑知识管理体验