2023-08-17 15:28阅读: 8评论: 0推荐: 0

《剑指Offer》-31-栈的压入、弹出序列

经典的选择题,但是这里要求用代码实现
我们可以根据 pop 结果去模拟这个过程,如果能够拟合,就是 true

什么情况下拟合成功?
两个指针都指向了数组末尾,同时栈空
太复杂了,条件能否简化一点?
什么时候拟合失败?
pushed 指针指向末尾全部压入栈中,但是poped 数组指针卡住了,不匹配导致弹栈弹不出去

pushed 数组指针指向末尾,同时栈空

尝试未果

bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack<int> stk;
int push = 0, pop = 0,len = pushed.size();
while (push <= len && pop<len) {
if (push!=0 &&!stk.empty() && stk.top() == popped[pop]) {
stk.pop();
pop++;
}
else {
stk.push(pushed[push]);
push++;
}
}
return stk.empty();
}

经 GPT 提示后 AC 代码如下
如果第一个 while 条件是小于,那么当 pushed 数组被全部压入栈中便会退出循环,此时栈和 pop 很有可能都不为空,也不确定结果是否匹配
然后在第二个 while 中,只要确认栈的出栈顺序和剩余的 pop 数组是否匹配就可以了

bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack<int> stk;
int push = 0, pop = 0, len = pushed.size();
while (push < len) {
if (!stk.empty() && stk.top() == popped[pop]) {
stk.pop();
pop++;
}
else {
stk.push(pushed[push]);
push++;
}
}
// 错误出在了这里,第一个循环退出有问题,再加一个while
while (!stk.empty() && stk.top() == popped[pop]) {
stk.pop();
pop++;
}
return stk.empty();
}

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/17637490.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(8)  评论(0编辑  收藏  举报
历史上的今天:
2022-08-17 力扣-15-三数之和
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起