栈的压入弹出系列
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&tqId=11174&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
思路:利用栈进行模拟即可,将压入序列数据进行入栈,同时对比弹出序列,如果压入数据等于弹出数据,则将数据压入后进行弹出,同时判断范围是否越界,最后在遍历完弹出序列后,判断序列是否为空
解法1:
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { int id = 0; for(int i=0;i<popV.size();i++) { while(st.empty()||st.top()!=popV[i])//st为空,进行入栈;st栈顶等于弹出序列,将数据进行弹出 { st.push(pushV[id++]); if(id>pushV.size())//范围越界,说明不是正确弹出序列 { return false; } } st.pop(); } if(st.empty())//栈为空,说明是正确弹出序列 return true; else return false; } private: stack<int> st; };
解法2:
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { int id = 0; for(int i =0;i<pushV.size();i++) { st.push(pushV[i]); while(!st.empty()&&st.top()==popV[id]&&id<popV.size()) { st.pop(); id++; } } if(st.empty()) return true; else return false; } private: stack<int> st; };