🎗️ 主页:小夜时雨
🎗️专栏:算法题
🎗️如何活着,是我找寻的方向
目录
- 1. 题目解析
- 2. 代码
1. 题目解析
题目链接: https://leetcode.cn/problems/validate-stack-sequences/ (可点击)
本道题是栈的经典应用问题:模拟栈序列问题, 我们依旧是采取栈 + 分类讨论的方式。
解决思路:
利用栈来模拟入栈出栈过程
- 让 push 数组内元素一直进栈
- 进栈的同时,判断栈顶元素是否等于 pop 数组出栈的元素
- 如果相等,则进行出栈操作,出栈之后,继续比较栈顶和下一个要出栈的元素, 直到不相等为止。
- 就是可能栈顶又是等于出栈的元素, 所以就是一个 while 循环。
接下来的代码里还会再次进行强调的,看下面的图更容易理解:
2. 代码
看下面的代码对照着上面的流程解析可能会更加的清楚。
public boolean validateStackSequences2(int[] pushed, int[] popped) {// 利用栈Stack<Integer> stack = new Stack<>();int i = 0; // 记录 pop 数组要出栈的下标for(int x : pushed) {// 先进栈, 然后立马进行判断是否要出站stack.push(x);// while(i < n && x == popped[i]) { 不是 x,要回变化的, 因为有可能要一直出栈, 所以比较的应该是栈顶元素// while(i < n && stack.peek() == popped[i]) {// 还需要进行一个先决条件, 栈不为空才会进行 peek// 有可能要一直出栈, 所以不能是 if 条件, 得是 while 循环while(!stack.isEmpty() && stack.peek() == popped[i]) {// 出栈stack.pop();i++;}}// 栈是空的, 则说明是正确的序列. 栈不空说明序列不正确return stack.isEmpty();}
🎗️🎗️🎗️ 好啦,到这里有关本题的分享就没了,如果感觉做的还不错的话可以点个赞,关注一下,你的支持就是我继续下去的动力,我们下期再见,拜了个拜~ ☆*: .。. o(≧▽≦)o .。.:*☆