输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
if(pushed.empty() && popped.empty())
return true;
if(pushed.empty() || popped.empty())
return false;
stack<int> simulation;
int p1 = 0, p2 = 0;
simulation.push(pushed[p1++]);
while(simulation.size()) {
if(simulation.top() == popped[p2]) {
simulation.pop();
p2++;
if(p2 == popped.size()) return true;
if(p1 < pushed.size() && simulation.empty()) simulation.push(pushed[p1++]);
continue;
}
if(p1 == pushed.size())
return false;
simulation.push(pushed[p1++]);
}
return false;
}

本文探讨了如何通过算法判断给定的两个整数序列,第一个序列表示栈的压入顺序,第二个序列是否为该栈的有效弹出顺序。文章详细解析了实现这一功能的具体步骤与逻辑,并提供了一个高效的解决方案。
460

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



