已知两个数组,pushV存的是栈的压入序列,本题需要判断popV序列是不是pushV的弹出序列
做法:找一个辅助的栈,只要这个栈的空或者栈顶不等于当前的popV[i]的元素,就不断的向辅助栈中压入这个元素,直到栈不空,并且栈顶与popV[i]相等,就直接pop这个辅助栈,但是有个问题就是,在压入的时候j有可能会>n,如果一旦大于,则不可能是弹出序列,最终的判断是这个栈是不是空的栈,如果是空的话,popV就是pushV的弹出序列。(本题的两个系列是相等的)
下面是自己写的代码:如果大佬发现问题可以告诉我!
class Solution {
public:
bool IsPopOrder(vector<int> pushV, vector<int> popV)
{
int n = popV.size();
stack<int> st;
int j = 0;
for (int i = 0; i < n; i++)
{
while (st.empty() || st.top() != popV[i])
{
st.push(pushV[j++]);
if (j > n)
return false;
}
st.pop();//一旦辅助栈的栈顶元素与当前该弹栈的元素相同,就弹出这个元素
}
if (st.empty())
return true;
else
return false;
}
};