当前位置: 首页> 文旅> 酒店 > 【栈】| 力扣高频题: 验证栈序列

【栈】| 力扣高频题: 验证栈序列

时间:2025/8/27 3:01:13来源:https://blog.csdn.net/Jin__Wang/article/details/141574143 浏览次数:0次

🎗️ 主页:小夜时雨
🎗️专栏:算法题
🎗️如何活着,是我找寻的方向

优雅

目录

  • 1. 题目解析
  • 2. 代码

1. 题目解析

题目链接: https://leetcode.cn/problems/validate-stack-sequences/ (可点击)

在这里插入图片描述

本道题是的经典应用问题:模拟栈序列问题, 我们依旧是采取栈 + 分类讨论的方式。

解决思路:

利用栈来模拟入栈出栈过程

  1. 让 push 数组内元素一直进栈
  2. 进栈的同时,判断栈顶元素是否等于 pop 数组出栈的元素
  3. 如果相等,则进行出栈操作,出栈之后,继续比较栈顶和下一个要出栈的元素, 直到不相等为止。
  4. 就是可能栈顶又是等于出栈的元素, 所以就是一个 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 .。.:*☆

关键字:【栈】| 力扣高频题: 验证栈序列

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: