问题:验证栈序列

给定 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 100005 class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
reverse(popped.begin(), popped.end());
VI stk;
REP(i,,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数据首先要判断是否为空,数组下标判断是否是在合理范围。

最新文章

  1. 使用vagrant部署开发环境
  2. attrs 中的 uid
  3. C#的 构造函数 和 方法重载
  4. Python网络编程(4)——异步编程select &amp; epoll
  5. BZOJ 2768 冠军调查(最小割)
  6. spring定时器 @Scheduled
  7. Deadline来了,如何按时结题?
  8. BMS 项目过程中遇到的问题
  9. Java并发编程:Future接口、FutureTask类
  10. JAVA Grammar Corrector
  11. C# 手机格式验证
  12. LeetCode OJ 55. Jump Game
  13. scrapy项目对接Docker
  14. Windows Server 2016-Powershell管理站点复制
  15. AELF(ELF)区块链项目介绍
  16. 如何在maven项目里面编写mapreduce程序以及一个maven项目里面管理多个mapreduce程序
  17. PAT L2-011 玩转二叉树(二叉树层序遍历)
  18. 学习字典才联想到要和 JSP 说再见了
  19. 连接oracle服务器超慢--原因分析
  20. leetcode172

热门文章

  1. 10-----关于DOM的时间操作
  2. 剑指Offer——数组中只出现一次的数字(一个很帅的异或解法)
  3. malloc内存申请--释放-收缩
  4. Java的compare比较
  5. A light-weight client-side OAuth library for Java
  6. 一个关于document.write()的问题
  7. 系统整理 精讲 swift 泛型
  8. 1074 食物链 2001年NOI全国竞赛
  9. Android 在已有工程中实现微信图片压缩
  10. 使用kvm制作Eucalyptus镜像(Windows Server 2008r2为例)