栈的压入、弹出序列
来源:互联网 发布:mac 导入照片 位置 编辑:程序博客网 时间:2024/06/05 17:02
题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
算法:
构造一个辅助栈
1)出栈数组的当前位如果和栈顶元素相同则判断出栈数组的下一个数。如果所有数都判断完,返回true。
2)如果不一致,则继续把入栈数组数据压栈。
3)如果不一致,并且入栈数组都已压栈,则返回false。
代码:
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
int pushsize = (int)pushV.size();
int popsize = (int)popV.size();
if(pushsize == 0 || popsize == 0)
return false;
stack<int> sk;
int j = 0;
sk.push(pushV[j]);
j++;
for (int i = 0; i < popsize; i++) {
if(sk.top()==popV[i]){
sk.pop();
}
else{
if(j<pushsize){
sk.push(pushV[j]);
j++;
}
else{
return false;
}
i--;
}
}
return true;
}
};
0 0
- 1366栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- Q22:栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入和弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 计算树中值最大路径
- Populating Next Right Pointers in Each Node
- Generate Parentheses
- 重建二叉树
- 顺时针打印矩阵
- 栈的压入、弹出序列
- Ant报错Open quote is expected for attribute "*A" associated with an element type "*B"
- 二叉搜索树的后序遍历序列
- 二叉树中和为某一值的路径
- 判断一棵树是否为二叉搜索树
- 二叉树的深度
- 平衡二叉树判断
- 复杂链表的复制
- 史上最全最强SpringMVC详细示例实战教程