当前位置: 首页 > news >正文

【刷题-牛客】出栈、入栈的顺序匹配 (代码+动态演示)

【刷题-牛客】出栈、入栈的顺序匹配 (代码+动态演示)

文章目录

  • 【刷题-牛客】出栈、入栈的顺序匹配 (代码+动态演示)
    • 解题思路
    • 动图演示
    • 完整代码
    • 多组测试

💗题目描述 💗:

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

  1. 0<=pushV.length == popV.length <=1000

  2. -1000<= pushV [i]<=1000

  3. 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();}
}

多组测试

  • 测试一

在这里插入图片描述

  • 测试二

在这里插入图片描述

  • 测试三

在这里插入图片描述

  • 测试四

8021598646)]


求三连!!!

相关文章:

【刷题-牛客】出栈、入栈的顺序匹配 (代码+动态演示)

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

vscode类似GitHub Copilot的插件推荐

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

Html -- 文字时钟

Html – 文字时钟 文字时钟&#xff0c;之前在Android上实现了相关效果&#xff0c;闲来无事&#xff0c;弄个网页版的玩玩。。。直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…...

快问快答:关于线上流量卡“归属地随机”几个问题!

在网上办过流量卡的朋友应该都知道&#xff0c;资费虽然便宜&#xff0c;但是归属地却是异地&#xff0c;今天小编就给大家聊一聊关于流量卡归属地的问题。 ​ 网上的流量卡都是归属地随机的卡&#xff0c;今天小编以问答的方式给大家普及一下&#xff0c;如果对于归属地有疑问…...

Linux常用命令——clock命令

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

澎湃OS上线:小米告别MIUI,跟小米汽车Say Hi

作者 | Amy 编辑 | 德新 10月17日&#xff0c;雷军发博官宣&#xff0c;「小米将启用全新操作系统&#xff0c;小米澎湃OS&#xff08;Xiaomi HyperOS&#xff09;」。 短短几百字的微博&#xff0c;数次提到了「小米汽车」&#xff1a; 小米向人车家全生态迈进&#xff0c;…...

域名不部署SSL证书有什么影响?

SSL证书是保护网站数据传输安全的重要工具&#xff0c;通过加密用户和服务器之间的通信来确保数据的保密性和完整性。然而&#xff0c;如果一个域名没有部署SSL证书&#xff0c;会对网站和用户产生一系列的负面影响。下文中将介绍域名不部署SSL证书的影响&#xff0c;并提供相应…...

Delphi 编程实现拖动排序并输出到文档

介绍&#xff1a;实现拖动排序功能&#xff0c;并将排序后的内容输出到文档中。我们将使用 Delphi 的组件来创建一个界面&#xff0c;其中包括一个 Memo 控件用于输入内容&#xff0c;一个 ListBox 控件用于显示排序后的内容&#xff0c;并且提供按钮来触发排序和输出操作。 代…...

android利用FFmpeg进行视频转换

大致思路&#xff1a;首先安装FFmpeg库到windows电脑上&#xff0c;先测试命令行工具是否可以使用&#xff08;需要先配置环境&#xff09;&#xff0c;之后再集成到android程序中。 一些命令&#xff1a; 转化为流文件&#xff1a; ffmpeg -i input.mp4 -codec copy -bsf:v …...

Python中不同进制间的转换

Python中不同进制间的转换 一、不同进制在计算机科学、数学和其他领域中具广泛的应用。以下是一些常见的应用&#xff1a;1. 二进制&#xff08;base-2&#xff09;: 在计算机系统中&#xff0c;数据以二进制形式存储和处理。二进制由0和1组成&#xff0c;是数字电子技术的基础…...

物流监管:智慧仓储数据可视化监控平台

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

C++对象模型(19)-- 函数语义学:成员函数

1、普通成员函数的调用 1.1 调用方式的转换 为了提高普通成员函数的调用效率&#xff0c;在C中&#xff0c;对普通成员函数的调用&#xff0c;会转换成对全局函数的调用。 假如有下面所示的成员函数&#xff1a; class Test { public:int m_i;int func(int a) {m_i a;retu…...

AI只需26秒,就可以设计一款会走路的机器人

由西北大学、麻省理工学院和佛蒙特大学组成的一支科研团队首次开发出一种可以完全自行设计机器人的 AI 算法。 这一 AI 算法不仅运行速度快&#xff0c;还可在个人计算机上运行&#xff0c;并从头开始设计全新的结构。只需告诉AI“我们想要一个可穿越陆地的机器人”&#xff0c…...

简单实现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()函数为例&#xff0c;进行解释&#xff1b; 文章目录 一、函数原型和源代码二、函数用法详解&#xff1a;2.1 参数2.1.1 TIM_HandleTypeDef结构体详解 2.2 使用场景&#xff1a;2.3 使用方法&#xff1a; 三、函数使用示例&#xff…...

C语言之通讯录的实现篇优化版

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

C++17中std::string_view的使用

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

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&#xff08;可扩展标记语言&#xff09;是一种常用的数据交换格式&#xff0c;用于存储和交换数据。然而&#xff0c;为了确保数据的一致性和有效性&#xff0c;通常需要定义XML约束。XML约束是一种规则集&#xff0c;定义了XML文档的结构、元素、属性和数据类型。本篇博客…...

Youtu-Parsing智能文档解析效果展示:复杂表格与公式精准识别案例

Youtu-Parsing智能文档解析效果展示&#xff1a;复杂表格与公式精准识别案例 每次处理一份满是表格和复杂公式的PDF文档&#xff0c;你是不是也感到头疼&#xff1f;手动录入数据不仅耗时费力&#xff0c;还容易出错。特别是遇到那种跨页表格、嵌套结构或者密密麻麻的数学公式…...

深入解析和(checksum)校验算法:从原理到实践

1. 什么是校验和算法&#xff1f; 校验和&#xff08;Checksum&#xff09;算法是一种简单但极其重要的数据校验方法。它的核心思想就像超市收银员核对购物小票总金额——把一堆数字加起来&#xff0c;看看结果是否符合预期。我在处理嵌入式系统通信协议时&#xff0c;几乎每天…...

如何在Vibe Kanban中创建和使用自定义标签:提升任务管理效率的完整指南

如何在Vibe Kanban中创建和使用自定义标签&#xff1a;提升任务管理效率的完整指南 【免费下载链接】vibe-kanban Get 10X more out of Claude Code, Codex or any coding agent 项目地址: https://gitcode.com/GitHub_Trending/vi/vibe-kanban Vibe Kanban是一款高效的…...

深入解析YOLOv8检测头:从DFL原理到实现细节

1. YOLOv8检测头的核心创新&#xff1a;DFL设计原理 第一次看到YOLOv8的检测头代码时&#xff0c;我盯着那个reg_max16的参数看了好久。这个看似简单的数字背后&#xff0c;藏着YOLOv8在目标检测精度上突飞猛进的秘密武器——Distribution Focal Loss&#xff08;DFL&#xff0…...

D3KeyHelper终极指南:让您的暗黑3游戏体验更上一层楼

D3KeyHelper终极指南&#xff1a;让您的暗黑3游戏体验更上一层楼 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为长时间按住旋风斩导致手部酸痛…...

2026年外墙保温防火一站式服务,哪家专业?带你一探究竟!

在建筑行业蓬勃发展的当下&#xff0c;外墙保温防火工程愈发重要。优质的外墙保温防火服务&#xff0c;不仅能提升建筑的节能性和安全性&#xff0c;还能延长建筑使用寿命。然而&#xff0c;市场上相关服务提供商众多&#xff0c;质量良莠不齐&#xff0c;让客户在选择时犯了难…...

MacOS下STM32标准库移植踩坑实录:手把手修复core_cm3.c编译错误(附完整Makefile)

MacOS下STM32标准库移植核心问题解析&#xff1a;从编译错误到Makefile优化实战 当你在MacOS环境下尝试移植STM32标准库时&#xff0c;那个突如其来的core_cm3.c编译错误是否让你措手不及&#xff1f;作为一名经历过同样困境的开发者&#xff0c;我完全理解这种挫败感——明明按…...

像素剧本圣殿效果展示:Qwen2.5-14B-Instruct生成的含多线程叙事标记的悬疑剧本

像素剧本圣殿效果展示&#xff1a;Qwen2.5-14B-Instruct生成的含多线程叙事标记的悬疑剧本 1. 专业剧本创作工具的新标杆 像素剧本圣殿是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具&#xff0c;它将前沿AI技术与复古像素美学完美结合&#xff0c;为编剧和内容创…...

K8s 1.36 新特性深度解析:服务网格与零信任集成(生产级配置)

K8s 1.36 新特性深度解析&#xff1a;服务网格与零信任集成&#xff08;生产级配置&#xff09; 前言&#xff1a;K8s 1.36 被称为“云原生安全网络里程碑”版本&#xff0c;核心突破集中在「服务网格原生化」和「零信任落地」两大板块——彻底解决了过去服务网格“资源占用高、…...

文墨共鸣模型自动化作业批改应用:针对编程与文本作业的智能评估

文墨共鸣模型自动化作业批改应用&#xff1a;针对编程与文本作业的智能评估 最近和几位当老师的朋友聊天&#xff0c;他们都在感慨&#xff0c;批改作业真是个体力活&#xff0c;尤其是编程作业和文科的问答题。编程题要一行行看逻辑、查错误&#xff0c;文科题要逐字逐句分析…...