输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
解法:
模拟栈的操作
创建一个stack变量,表示入栈;
如果stack为空,或者stack.top()==popV[i],stack.pop
否则,stack.push(pushv【inpos])
bool IsPopOrder(vector<
int
> pushV, vector<
int
> popV) {
int
size1 = pushV.size();
int
size2 = popV.size();
if
(size1 != size2||size1==
0
)
return
false
;
stack<
int
> st;
int
inpos =
0
;
for
(
int
i =
0
; i<size2;){
if
(!st.empty() && st.top() == popV[i]){
st.pop();
i++;
}
else
{
if
(inpos < size1)
st.push(pushV[inpos++]);
else
return
false
;
}
}
return
inpos == size1&&st.empty();
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。