《剑指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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2022-08-17 力扣-15-三数之和