【刷题-牛客】出栈、入栈的顺序匹配 (代码+动态演示)
【刷题-牛客】出栈、入栈的顺序匹配 (代码+动态演示)
文章目录
- 【刷题-牛客】出栈、入栈的顺序匹配 (代码+动态演示)
- 解题思路
- 动图演示
- 完整代码
- 多组测试
💗题目描述 💗:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
0<=pushV.length == popV.length <=1000
-1000<= pushV [i]<=1000
pushV 的所有数字均不相同
💗解释 : 其实这个题目的意思就是把通常经常遇见的判断题 已知入栈顺序(入栈的同时可以出栈),判断不可能的出栈顺序 ,封装成一个方法,然后我们通过此方法,传入 入栈顺序 和 可能的出栈顺序,方法返回 true 代表 该出栈顺序是可能的, 返回false 代表 该出栈顺序是不可能的 .
解题思路
遍历入栈顺序进行压栈,压栈之后遍历可能的出栈顺序,如果遍历到的元素若与此时栈顶元素相同则表示应该出栈,然后继续后移判断;若不相同则表示此时不用出栈,转而继续进行压栈操作.
接下来我将通过动态图演示具体的过程,同时会将伪代码先写出来
例子入栈顺序 : 1 2 3 4 5 可能的出栈顺序 : 4 3 5 1 2
动图演示
- 可能出现的bug
我们通过观察伪代码中的while循环语句的条件,我们并没有考虑如果栈为空和 j 下标越界的情况 , 为什么要考虑这两种情况呢 ?
原因 : 我们在需要对这个代码进行测试 , 也就是看这个代码是否满足所有测试用例可能出现的情况.
当入栈顺序和可能的出栈顺序是相反的 : 可能的出栈顺序② : 5 4 3 2 1入栈顺序 : 1 2 3 4 5
当栈为空的时候,我们就不能再进入while循环的条件语句去执行s.peek()==popV[j]
了,所以我们可以在while条件
中增加一个条件 && != s.empty()
当入栈顺序和可能的出栈顺序是相同的 :
可能的出栈顺序③ : 1 2 3 4 5
入栈顺序 : 1 2 3 4 5
此时在while循环中执行完 s.pop()
之后,需要继续执行 j++ ,那么 j 就变成了 popV.length
了. 所以此时我们不能进入while循环的条件语句去执行s.peek() == popV[j]
了,因为此时的 j 会出现下标越界异常,所以我们可以增加一个条件 && j<popV.length
- 继续完善
由于题目要求 0<=pushV.length == popV.length <=1000
那么我们给方法传入的两个数组参数是可能为空的,为了提升代码的健壮性,我们可以可再继续加一个 if
条件语句 <font color=‘red’ return false;`
完整代码
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param pushV int整型一维数组 * @param popV int整型一维数组 * @return bool布尔型*/public boolean IsPopOrder (int[] pushV, int[] popV) {Stack<Integer> stack = new Stack<>();int j = 0;if(pushV.length == 0 || popV.length == 0) return false;for (int i = 0; i < pushV.length; i++) {stack.push(pushV[i]);while(j<popV.length&& !stack.empty() && stack.peek().equals(popV[j])){stack.pop();j++;}}return stack.empty();}
}
多组测试
- 测试一
- 测试二
- 测试三
- 测试四
求三连!!!
相关文章:

【刷题-牛客】出栈、入栈的顺序匹配 (代码+动态演示)
【刷题-牛客】出栈、入栈的顺序匹配 (代码动态演示) 文章目录 【刷题-牛客】出栈、入栈的顺序匹配 (代码动态演示) 解题思路 动图演示完整代码多组测试 💗题目描述 💗: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个…...

vscode类似GitHub Copilot的插件推荐
由于GitHub Copilot前段时间学生认证的账号掉了很多,某宝激活也是价格翻了几倍,而却,拿来用一天就掉线,可以试试同类免费的插件哦。 例如:TabNine,下载插件后,他会提示你登录,直接登…...

Html -- 文字时钟
Html – 文字时钟 文字时钟,之前在Android上实现了相关效果,闲来无事,弄个网页版的玩玩。。。直接上代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…...
快问快答:关于线上流量卡“归属地随机”几个问题!
在网上办过流量卡的朋友应该都知道,资费虽然便宜,但是归属地却是异地,今天小编就给大家聊一聊关于流量卡归属地的问题。 网上的流量卡都是归属地随机的卡,今天小编以问答的方式给大家普及一下,如果对于归属地有疑问…...

Linux常用命令——clock命令
在线Linux命令查询工具 clock 用于调整 RTC 时间。 补充说明 clock命令用于调整 RTC 时间。 RTC 是电脑内建的硬件时间,执行这项指令可以显示现在时刻,调整硬件时钟的时间,将系统时间设成与硬件时钟之时间一致,或是把系统时间…...

澎湃OS上线:小米告别MIUI,跟小米汽车Say Hi
作者 | Amy 编辑 | 德新 10月17日,雷军发博官宣,「小米将启用全新操作系统,小米澎湃OS(Xiaomi HyperOS)」。 短短几百字的微博,数次提到了「小米汽车」: 小米向人车家全生态迈进,…...
域名不部署SSL证书有什么影响?
SSL证书是保护网站数据传输安全的重要工具,通过加密用户和服务器之间的通信来确保数据的保密性和完整性。然而,如果一个域名没有部署SSL证书,会对网站和用户产生一系列的负面影响。下文中将介绍域名不部署SSL证书的影响,并提供相应…...

Delphi 编程实现拖动排序并输出到文档
介绍:实现拖动排序功能,并将排序后的内容输出到文档中。我们将使用 Delphi 的组件来创建一个界面,其中包括一个 Memo 控件用于输入内容,一个 ListBox 控件用于显示排序后的内容,并且提供按钮来触发排序和输出操作。 代…...
android利用FFmpeg进行视频转换
大致思路:首先安装FFmpeg库到windows电脑上,先测试命令行工具是否可以使用(需要先配置环境),之后再集成到android程序中。 一些命令: 转化为流文件: ffmpeg -i input.mp4 -codec copy -bsf:v …...
Python中不同进制间的转换
Python中不同进制间的转换 一、不同进制在计算机科学、数学和其他领域中具广泛的应用。以下是一些常见的应用:1. 二进制(base-2): 在计算机系统中,数据以二进制形式存储和处理。二进制由0和1组成,是数字电子技术的基础…...

物流监管:智慧仓储数据可视化监控平台
随着市场竞争加剧和市场需求的不断提高,企业亟需更加高效、智能且可靠的仓储物流管理方式,以提升企业的物流效率,减少其输出成本,有效应对市场上的变化和挑战。 图扑自研 HT for Web 产品搭建的 2D 智慧仓储可视化平台,…...

C++对象模型(19)-- 函数语义学:成员函数
1、普通成员函数的调用 1.1 调用方式的转换 为了提高普通成员函数的调用效率,在C中,对普通成员函数的调用,会转换成对全局函数的调用。 假如有下面所示的成员函数: class Test { public:int m_i;int func(int a) {m_i a;retu…...

AI只需26秒,就可以设计一款会走路的机器人
由西北大学、麻省理工学院和佛蒙特大学组成的一支科研团队首次开发出一种可以完全自行设计机器人的 AI 算法。 这一 AI 算法不仅运行速度快,还可在个人计算机上运行,并从头开始设计全新的结构。只需告诉AI“我们想要一个可穿越陆地的机器人”,…...
简单实现spring的set依赖注入
Maven依赖: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0…...
STM32 HAL库函数——HAL_TIM_Base_Start_IT()详解
以STM32G030C8T6中的HAL_TIM_Base_Start_IT()函数为例,进行解释; 文章目录 一、函数原型和源代码二、函数用法详解:2.1 参数2.1.1 TIM_HandleTypeDef结构体详解 2.2 使用场景:2.3 使用方法: 三、函数使用示例ÿ…...

C语言之通讯录的实现篇优化版
目录 动态内存管理 通讯录声明 静态版本 动态版本 初始化通讯录 静态版本 动态版本 Add增加通讯录 静态版本 动态版本 Checkcapacity增容 DestroyContact释放动态空间 文件操作 SaveContact保存信息到文件中 初始化通讯录 旧版本 文件版本 LoadContact加载…...

C++17中std::string_view的使用
为了解决std::string初始化(或拷贝)成本高昂的问题,C17引入了std::string_view。std::string_view提供对现有字符串(C风格字符串、std::string、或另一个std::string_view)的只读访问,而无需进行拷贝。当想要有效地处理和操作字符串而不修改它们时&#…...

C#,数值计算——分类与推理Phylo_nj的计算方法与源程序
1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Phylo_nj : Phylagglom { public double[] u; public override void premin(double[,] d, int[] nextp) { i…...

element-ui 图片压缩上传
picture.js export const compressImgNew (file) > {return new Promise(resolve > {const reader new FileReader()const image new Image()image.onload (imageEvent) > {const canvas document.createElement(canvas) // 创建画布const context canvas.getCo…...

【Java 进阶篇】Java XML约束:确保数据一致性和有效性
XML(可扩展标记语言)是一种常用的数据交换格式,用于存储和交换数据。然而,为了确保数据的一致性和有效性,通常需要定义XML约束。XML约束是一种规则集,定义了XML文档的结构、元素、属性和数据类型。本篇博客…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...