题解 | #栈的压入、弹出序列#
class Solution
{
public:
bool IsPopOrder(vector<int>& pushV, vector<int>& popV)
{
stack<int> st;
int pushi=0, popi = 0;
//依次入pushV的数据,栈顶数据与出栈序列匹配,如果匹配,将匹配的数据pop
while (pushi < pushV.size())
{
//入数据
st.push(pushV[pushi++]);
//不匹配
if (st.top() != popV[popi])
{
continue;
}
//栈顶数据与出栈序列匹配,将栈顶的数据pop
else
{
while( !st.empty() && st.top() == popV[popi] )
{
//将匹配的数据pop
st.pop();
popi++;
}
}
}
return st.empty();//如果栈为空,则符合题意
}
};
模拟一个栈的push和pop操作
1 、定义pushi 和popi,pushi 遍历pushV ,popi 遍历popV
2、依次入pushV的数据, 如果栈顶数据与popV中的数据不匹配,则继续入数据
如果栈顶数据与popV中的数据匹配,将栈顶数据pop ,popi往后走
注意此时pushi不需要走,可能栈顶还有数据与popV中的数据匹配
3、这个程序执行完,栈中为空,说明符合题意

腾讯云智研发成长空间 5106人发布