问题:验证栈序列

给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。

示例 1:

输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:

输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。

提示:

  1. 0 <= pushed.length == popped.length <= 1000
  2. 0 <= pushed[i], popped[i] < 1000
  3. pushed 是 popped 的排列。

链接:https://leetcode-cn.com/contest/weekly-contest-112/problems/validate-stack-sequences/

分析:

给出push顺序,判断给出的pop顺序是否合理,那么只需要用stack存储数据,依次push数据,然后判断栈顶是否可以pop即可,最终看stack是否为空(pushed.length==popped.length)。

流程:

push一个数字,然后尽可能的pop,直到不能pop为止,然后push下一个数字,直到push完所有。

AC Code:

class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {bool ret = false;stack<int> tmpstack;int popindex = 0;for (int i = 0; i < pushed.size(); i++){tmpstack.push(pushed[i]);while (tmpstack.empty()==false && tmpstack.top() == popped[popindex]){popindex++;tmpstack.pop();}}if (tmpstack.empty() == true){ret = true;}return ret;}
};

其他:

1.第一code:

typedef long long ll;
typedef vector<int> VI;
typedef pair<int,int> PII;#define REP(i,s,t) for(int i=(s);i<(t);i++)
#define FILL(x,v) memset(x,v,sizeof(x))const int INF = (int)1E9;
#define MAXN 100005class Solution {
public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {reverse(popped.begin(), popped.end());VI stk;REP(i,0,pushed.size()) {stk.push_back(pushed[i]);while (stk.size() && popped.size() && stk.back() == popped.back()) {stk.pop_back();popped.pop_back();}}if (popped.size()) return false;return true;}
};

2.对数据进行操作的时候,一定要防止越界,比如stack获取top数据首先要判断是否为空,数组下标判断是否是在合理范围。

转载于:https://www.cnblogs.com/youdias/p/10015934.html

LeetCode946-验证栈序列相关推荐

  1. 946. 验证栈序列

    2020-05-15 1.题目描述 验证栈序列 2.题解 这个题目我本科的一位老师在给我们上算法课的时候讲过,他说关键是要明白我们什么时候需要入栈,什么 时候需要出栈,题目是要返回pushed数组能不 ...

  2. 青铜三人行之验证栈序列

    先说一个消息,为了方便互相交流学习,青铜三人行建了个微信群,感兴趣的伙伴可以扫码加下面的小助手抱你入群哦! 青铜三人行--每周一题@验证栈序列 视频讲解 力扣题目 验证栈序列 给定 pushed 和 ...

  3. 栈——验证栈序列(洛谷 P4387)

    题目选自洛谷P4387 是一道栈的题,能够帮助理解栈的更深层次. 题目大意就是判断序列是否可能是对应序列的出栈序列. 如何判断是不是合理的出栈序列呢? 对于序列a 我们依次和序列b来比较,如果不相同, ...

  4. Leetcode 946.验证栈序列

    Time: 20190906 Type: Medium 题目描述 给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返 ...

  5. P4387 【深基15.习9】验证栈序列

    #include<iostream> #include<stack>//不要忘记头文件 using namespace std; stack<int>k; int ...

  6. LeetCode 946. 验证栈序列(栈)

    1. 题目 给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true:否则,返回 f ...

  7. 946. Validate Stack Sequences验证栈序列

    网址:https://leetcode.com/problems/validate-stack-sequences/ 参考:https://leetcode.com/problems/validate ...

  8. 给定入栈序列,判断一个串是否为出栈序列

    剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...

  9. 栈 - 关于出栈序列,判断合法的出栈序列

    文章目录 1 引例 2 做题方法 3 原因 3.1 选项D(4 3 1 2)的模拟 1 引例 (例)设栈的入栈序列是 1 2 3 4,则下列不可能是其出栈序列的是( ). A. 1 2 4 3 B. ...

最新文章

  1. 【剑道】用语中日对照
  2. 北京AI产业联盟来了!百度牵头,小米美团滴滴旷视纷纷入会
  3. hive数据仓库建设
  4. (35)23种设计模式研究之六【命令模式】
  5. 相对完善的Java通过JDBC操纵mysql的例子
  6. css3文字一行或多行展示,多余文字省略号(学习)超出隐藏
  7. 分布式系统架构的基本原则和实践
  8. seata分布式事务原理_又见分布式事务之Seata
  9. c语言中什么函数可以作为虚函数,C++语言中的“虚函数”就像C语言中的指针,必须要弄懂的...
  10. C#,入门教程——一个优秀程序员的修炼之道
  11. 怎么删掉计算机云u盘,win10系统删除360云u盘图标的操作方法
  12. filter 无效不起作用
  13. 【寒江雪】Go实现单例模式
  14. IDEA搭建Go语言开发环境
  15. python ip地址处理_Python学习笔记-IP地址处理模块Ipy
  16. Java基础篇之利用IO流给文件加密、解密
  17. android视频壁纸源码,Android视频壁纸的实现
  18. androbench跑分性能排查
  19. WinHttp.WinHttpRequest.5.1
  20. 8个超好用的免费工具/软件/网站

热门文章

  1. 动态规划求解所有字符的组合数
  2. java限制金额控制_JavaMail 限额管理
  3. 服务器安装win7系统蓝屏,安装win7系统出现蓝屏| win7安装过程中蓝屏|安装win7系统时蓝屏...
  4. 计算机组成原理的实验节拍,一种计算机组成原理的实验装置
  5. python中math模块函数_python中math模块函数
  6. c语言将一个实型变量f=55.5678,《C语言程序设计》第2章2 常量和变量
  7. dao层和service层和control_最受欢迎Java数据库访问框架(DAO层)
  8. 清华计算机系山东分数,清华大学山东录取分数线|2021清华大学山东分数线|2021年清华大学山东高考分数线|2021年清华大学山东招生计划录取人数...
  9. mac win10 mysql_Mac装双系统Win10,安装MySQL遇到的问题
  10. php验证邮箱的通用函数,PHP函数:PHP的通用检测函数总结