这道题上来就不会做,一开始想着从弹出序列出发,然后依次判断压入序列,但是代码写起来特别不好,思路就是错的。无奈之下,还是看了题解。

这道题最基本的思想就是模拟法,模拟栈的压入、弹出,因为弹出之前的值都会先入栈。所以,在解题过程中要借助栈这一数据结构。

算法主要思路如下:

1. 初始化:用指针i指向pushA的第一个位置,用指针j指向popA的第一个位置;
2. 如果pushA[i] != popA[j],那么此时将pushA[i]入栈,然后i++;
3. 否则,pushA[i] = popA[j],此时说明这个元素放入栈中立马弹出,所以接下来i++,j++;然后这时应该检查popA[j]是否与栈顶元素相等,如果相等,则j++并且弹出栈顶元素。
4. 重复2和3,如果i == pushA.length,那么说明入栈序列访问完毕,此时检查栈是否为空,如果为空,则入栈序列与出栈序列匹配,否则不匹配。

时间复杂度:O(n)
空间复杂度:O(n), 用了一个辅助栈,最坏情况下会全部入栈

好难!/(ㄒoㄒ)/~~
2020-09-07
在牛客打卡14天,今天学习:刷题 1 道/代码提交 2 次
全部评论

相关推荐

06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务