剑指 Offer 31. 栈的压入、弹出序列 - 力扣(LeetCode)
运行结果
代码
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
int* stk = new int[pushed.size()], sp = 0;
int buoy = 0; //浮标,表示当前在入栈序列中检测到的位置
for (int i = 0; i < popped.size(); ++i) { //依次检查输出序列中的每个数字
int target = popped[i];
if (sp && stk[sp - 1] == target) --sp; //首先检查是否在栈顶
else { //如果不在栈顶,检查是否还未入栈
while (buoy < pushed.size() && pushed[buoy] != target) stk[sp++] = pushed[buoy++]; //检查所有未入栈元素
if (buoy == pushed.size()) return false; //如果没有找到,那么说明该元素在栈中的某个位置,此时无法将其弹出,则该序列不是弹出序列
++buoy; //如果找到了,那么将该元素进栈并出栈
}
}
delete[] stk;
return true;
}
};