思路:利用栈进行模拟即可,将压入序列数据进行入栈,同时对比弹出序列,如果压入数据等于弹出数据,则将数据压入后进行弹出,同时判断范围是否越界,最后在遍历完弹出序列后,判断序列是否为空
解法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;
};
京公网安备 11010502036488号