输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
思路:跟栈顶比较,若相同出栈,若不同,则遍历a,找到该元素。
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
//day 2017-6-23 周五
//思路:
//判断是否为0;
//构造个辅助栈
if(pushV.size()==0||popV.size()==0) return false;
stack<int> m_res;
// 来个循环
int i=0;
int j=0;
while(i<pushV.size())
{
//如果与栈顶相同
//push()push错了
m_res.push(pushV[i++]);
//while(j<popV.size()&&m_res.top()==popV[j])
while(j<popV.size()&&m_res.top()==popV[j])
{
m_res.pop();
j++;
}
//如果不等于栈顶元素
}
//if(m_res.size()) return false;
// return true;
return m_res.empty();
}
};