Leetcode-每日一题【剑指 Offer 31. 栈的压入、弹出序列】

题目

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。

示例 1:

输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:

输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。

提示:

  1. 0 <= pushed.length == popped.length <= 1000
  2. 0 <= pushed[i], popped[i] < 1000
  3. pushed 是 popped 的排列。

解题思路

1.题目要求我们判断栈的弹出顺序是否是所给两个整数序列,对于这道题我们需要设置一个辅助栈来帮助我们。还需要一个变量k来指向我们的出栈元素,方便我们读取。

2.举个例子:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]

我们先按入栈顺序入栈第一个元素1

  

然后判断stack当前的栈顶元素是否等于k指向的出栈顺序的元素,若不等于我们就继续入栈

 再次判断stack当前的栈顶元素是否等于k指向的出栈顺序的元素,不等于我们继续入栈

 stack当前的栈顶元素依旧不等于k指向的出栈顺序的元素,我们继续入栈

  此时我们可以看到 stack当前的栈顶元素等于k指向的出栈顺序的元素,我们就将Stack的栈顶元素出栈,并将 k 后移。

这时 stack当前的栈顶元素不等于k指向的出栈顺序的元素,我们继续按照入栈顺序继续入栈

再次将 stack当前的栈顶元素与k指向的出栈顺序的元素进行判断,发现两者相等,我们就将栈顶元素进行出栈,并且将k后移

出栈

 

出栈

 

出栈

 

此时我们发现stack栈空了,那就证明所给的出栈顺序是正确的。

3.本体的主要思想就是,我们需要查看栈顶元素是否与出栈顺序所对应的元素相等,若相等就出栈,若不等就继续按照入栈顺序入栈,如果所有的操作结束后栈为空,就证明所给顺序正确,否则就代表所给顺序有误。 

代码实现

class Solution {public boolean validateStackSequences(int[] pushed, int[] popped) {//判断所给序列是否为空if(pushed == null || pushed.length == 0){return true;}//设置一个辅助栈Stack<Integer> stack = new Stack();int k = 0;for(int i = 0; i < pushed.length; i++){stack.push(pushed[i]);while(!stack.isEmpty() && stack.peek() == popped[k]){stack.pop();k++;} }return stack.isEmpty();}
}

测试结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在SAP上使用 LiquidUI Android 扫描条形码/QR 码

LiquidUI Android 可使用安卓移动设备的内置摄像头扫描条形码和二维码&#xff0c;为输入框填充数值。因此&#xff0c;无需附加任何第三方设备进行扫描。 LiquidUI Android 还提供了扫描功能&#xff0c;如 Accessible-Enter&#xff08;俗称自动输入&#xff09;和 Accessib…

kotlin + LiveData 测试

viewModel测试&#xff1a;https://developer.android.com/codelabs/basic-android-kotlin-compose-test-viewmodel#3 androidTestImplementation "org.jetbrains.kotlin:kotlin-test:1.9.0"androidTestImplementation org.jetbrains.kotlinx:kotlinx-coroutines-tes…

基于粒子群改进深度信念网络的回归分析,基于PSO-DBN的回归分析

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) 粒子群算法的原理 DBN的粒子群改进深度信念网络的回归分析 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算…

介绍一些操作系统— CentOS 系统

介绍一些操作系统— CentOS 系统 CentOS 系统 CentOS 是 Linux 发行版之一&#xff0c;是免费的、开源的、可以重新分发的开源操作系统。 CentOS Linux发行版是一个稳定的&#xff0c;可预测的&#xff0c;可管理的和可复现的平台&#xff0c;源于 Red Hat Enterprise Linux…

SAP MM学习笔记22- 购买发注的项目种类(明细Category)

SAP中控制购买流程的是购买发注页面中购买发注明细行的项目种类&#xff08;明细Category&#xff09;栏目。 ・项目种类&#xff08;明细Category&#xff09;有&#xff1a; 1&#xff0c; 标准 2&#xff0c;K 受托品 3&#xff0c;L 外注 4&#xff0c;S 仕入先直送…

Keepalived+http高可用实战

环境准备&#xff1a; 两台安装了keepalived的服务器 ip&#xff1a;192.168.134.170;192.168.134.172 1、安装http服务 yum install httpd -y2、写一个测试页面 [rootlocalhost ~]# echo "hostname -I,web1 test page. " > /var/www/html/inde [rootlocalho…

Linux下搭建java环境

文章目录 一&#xff0c;xshell链接linux二&#xff0c;linux安装jdk环境 一&#xff0c;xshell链接linux 这里用到的工具,VMware搭配CentOS7 64位Xshell5 操作之前确保,传输Xshell连接了虚拟机 打开Xshell,文件->新建 主机ip—>进入虚拟机,右键打开终端,输入命令:ifco…

centos 安装 virtualbox

参考 https://phoenixnap.com/kb/how-to-install-virtualbox-centos-7 遇到 Gpg Keys Failue 这样解决 将 rpm 包下载到本地 –disablerepovirtualbox sudo yum --disablerepovirtualbox localinstall VirtualBox-7.0-7.0.10_158379_el7-1.x86_64 failure: repodata/repomd…

STC单片机掉电(停机)模式介绍和使用

STC单片机掉电(停机)模式介绍和使用 ✨在STC8/12/15单片机中都包含有掉电(省电模式)。 📑掉电模式/停机模式 🌿STC12/15/8通用。📋将寄存器PCON的.1Bit位置为1(PCON |=0x02),单片机将进入掉电模式,(掉电模式也叫停机模式)进入掉电模式后,内部时钟停振,由于无时钟…

适用于物联网 (IoT)的远距离、低功耗、低速率WiFi—Wi-Fi HaLow

1. Wi-Fi 简介 Wi-Fi&#xff08;Wireless Fidelity&#xff09;是目前较为常见的无线通信方式&#xff0c;承载着一半以上的互联网流量。Wi-Fi是一个总称&#xff0c;涵盖了802.11通信协议系列&#xff0c;由Wi-Fi联盟持有并推动其发展。802.11通信协议发展至今已逾二十年&am…

【Stable Diffusion】雨天、湿身

一、Models 1.1、Wet Clothes (Clothing Style) [LoHA] WECL SEE-THROUGH WET WET HAIR BIKINI OR SWIMSUIT UNDER CLOTHES NO BRA BRA VISIBLE THROUGH CLOTHES MISC SHIRTS MISC CLOTHES1.2、Rain 雨 Multiply Style rain style1.3、Wet T-Shirt LORA <lora:wetshirt:…

为什么要做数据可视化系统

数据可视化系统在当今数字时代发挥着重要的作用&#xff0c;成为许多组织和企业的不可或缺的工具。随着信息爆炸式增长和数据处理的需求不断增加&#xff0c;数据可视化系统帮助人们更好地理解和分析数据&#xff0c;为决策提供重要支持。数聚股份将详细介绍为什么要做数据可视…

【日常积累】Linux下文件乱码问题

linux下删除乱码文件、目录 由于编码原因&#xff0c;在linux服务器上上传、创建中文文件或目录时&#xff0c;会产生乱码&#xff0c;如果想删除它&#xff0c;有时候发现用rm命令是删除不了的 这种情况下&#xff0c;用find命令可以删除乱码的文件或目录。 首先进入乱码文件…

QT:自定义控件(Connect使用,子控件连接)

自定义控件封装&#xff1a; 1.添加新文件&#xff08;设计师界面类&#xff09;&#xff0c;创建子页面 &#xff0c;放自己想要的控件 2.在主页面中使用子控件 :新建一个widget-![在这里插入图片描述](https://img-blog.csdnimg.cn/95ed8015343e4c56a3914853950eff4c.png#pi…

Spring Boot | 使用mkcert本地生成SSL证书配置后端接口为HTTPS协议

Tips&#xff1a;本篇博客是 Windows 版本的使用教程&#xff0c;cmd 中执行的命令前缀是下载的软件名称&#xff0c;需要改成自己下载软件的名称&#xff01; 下载软件 首先去 GitHub 仓库中下载软件&#xff0c;下载完成后将文件保存在英文路径下的文件夹&#xff0c;之后以…

喜报!诚恒科技与赛时达科技达成BI金蝶云星空项目合作

随着全球数字化浪潮轰轰烈烈袭来&#xff0c;仅仅凭借手工处理的方式难以在庞大的数据海洋中精准获取信息、把握市场需求、了解目标用户&#xff0c;为企业创新提供强有力的支持。深圳赛时达科技有限公司&#xff08;简称赛时达科技&#xff09;希望通过数字化转型实现从手工处…

未来混合动力汽车的发展:技术探索与前景展望

随着环境保护意识的增强和对能源消耗的关注&#xff0c;混合动力汽车成为了汽车行业的研发热点。混合动力汽车融合了传统燃油动力和电力动力系统&#xff0c;通过优化能源利用效率&#xff0c;既降低了燃油消耗和排放&#xff0c;又提供了更长的续航里程。本文将探讨混合动力汽…

【Linux】应用层之HTTP协议

HTTP协议 应用层协议应用层的作用&#xff1a;为应用程序提供网络服务序列化的意义、为什么要将数据序列化&#xff1f;HTTP协议概述HTTP的协议格式请求响应GET方法和POST方法的出现的场景和区别&#xff1f; 应用层协议 在应用层&#xff0c;需要我们传递应用层所需特殊的数据…

Python数学函数、字符串和对象

学习目标&#xff1a; 使用math模块中的函数解决数学问题表示和处理字符串和字符使用ASCII和Unicode对字符编码使用ord函数获取一个字符的数值编码以及使用chr函数将一个数值编码转换成一个字符使用转义序列表示特殊字符调用带参数end的print函数使用str函数将数字转换成字符串…

Python的getattr方法

getattr是Python中的内置函数&#xff0c;用于获取一个对象的属性值。这个函数是动态获取属性的一种方式&#xff0c;特别适用于你事先不知道要获取哪个属性&#xff0c;或者属性名是在运行时确定的情况。 使用方法&#xff1a; getattr(object, name, [default])object: 要从…