题目:输入两个整数序列。第一个序列表示栈的压入顺序,请判断第二个序列是否是栈的弹出顺序。假设压入栈的所有数字均不相等。例如1,2,3,4,5是某栈的压入序列,序列4,5,3,2,1是该栈序列对应的一个弹出序列,但是4,3,5,1,2就不可能是该压栈的弹出序列。
看到该题目开始想的是用一个栈去实现。思路也是对的,但是思路出来了代码没写出来,各种错误,心里很急躁啊,静不下心来调,只有看书上代码了。
思路是:设定一个栈,现将第一个序列依次入栈,如果栈顶元素是第二个栈的要弹出的元素,就直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入栈,直到下一个需要弹出的数字压入栈顶为止。如果所有的 数字都压入栈中,此时还没有弹出,则,不可能是一个弹出序列。
代码如下:
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
bool bPossible=false;
if(pushV.size()!=popV.size())
return bPossible;
int len=pushV.size();
stack<int> st;
int i=0,j=0;
if(len>0)
{
while(j<len)
{
while(st.empty()||st.top()!=popV[j])
{
if(i==len)
break;
st.push(pushV[i]);
i++;
}
if(st.top()!=popV[j])
{
break;
}
st.pop();
j++;
}
if(st.empty()&&j==len)
bPossible=true;
}
return bPossible;
}
};
本文介绍了一种算法,用于判断给定的两个整数序列是否能构成有效的栈压入和弹出序列。通过使用辅助栈模拟压栈和弹出过程,文章详细解释了其实现逻辑,并提供了一个具体的C++代码示例。
16万+

被折叠的 条评论
为什么被折叠?



