g
y
7
7
7
7

stack的应用

题目描述:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。

假设压入栈的所有数字均不相等。

例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

注意:若两个序列为空或长度不等则视为并不是一个栈的压入、弹出序列。

样例

输入:[1,2,3,4,5]
      [4,5,3,2,1]

输出:true

解答:

参考来自:https://www.acwing.com/solution/acwing/content/765/

 

class Solution {
public:
	bool isPopOrder(vector<int> pushV, vector<int> popV) {
		if (pushV.empty() || popV.empty() || pushV.size() != popV.size()) return 0;
		stack<int>st;
		int popid = 0;	//出栈编号
		int len = pushV.size();
		for (int pushid = 0; pushid<len; pushid++) {
			st.push(pushV[pushid]);
			while (!st.empty() && st.top() == popV[popid]) {//判断能否出栈
				st.pop();
				popid++;		//出栈后,自增
			}
		}
		if (st.empty())return 1;
		return 0;

	}
};

  

posted @ 2019-02-26 08:58  gy77  阅读(212)  评论(0编辑  收藏  举报