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

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

文章目录

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

💗题目描述 💗:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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)]


求三连!!!

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

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

相关文章

【机械臂视觉抓取从理论到实战】

首先声明一下,此项目是参考B站哈萨克斯坦UP的【机械臂视觉抓取从理论到实战】 此内容为他研究生生涯的阶段性成果展示和技术分享,所有数据和代码均开源。所以鹏鹏我特此来复现一下,我采用的硬件与之有所不同,UP主使用UR5,我实验室采用的是UR3,下面列出相关材料 UR3CB3.12…

UnitTest框架的使用

文章目录 一、UnitTest框架是什么&#xff1f;二、UnitTest核心要素三、TestCase四、TestSuite & TestRunner 一、UnitTest框架是什么&#xff1f; UnitTest框架是python自带的一个单元测试框架&#xff0c;主要用它来做单元测试&#xff0c;它有以下特点&#xff1a; 能…

Inbound marketing | LTD入站营销是对Hubspot集客营销的升级

你如何理解Inbound marketing&#xff1f; 你如何理解Inbound marketing。 集客营销抑或是入站营销。 2006年&#xff0c;MIT的在校学生BrianHalligan和DharmeshShah&#xff08;hubspot的创始人&#xff09;首次提出Inbound marketing&#xff0c;有别于推广式营销的一种全…

React之render

一、原理 首先&#xff0c;render函数在react中有两种形式&#xff1a; 在类组件中&#xff0c;指的是render方法&#xff1a; class Foo extends React.Component {render() {return <h1> Foo </h1>;} }在函数组件中&#xff0c;指的是函数组件本身&#xff1a…

【Mysql】Mysql中的B+树索引(六)

概述 从上一章节我们了解到InnoDB 的数据页都是由7个部分组成&#xff0c;然后各个数据页之间可以组成一个双向链表 &#xff0c;而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表 &#xff0c;每个数据页都会为存储在它里边儿的记录生成一个页目录 &#xff…

如何查看SSL证书是OV还是DV?

网站的安全性与信任度对于用户来说至关重要&#xff0c;它决定着用户是否继续浏览以及是否与您开展业务。SSL证书则是确保网站能够通过HTTPS加密安全传输数据的基础&#xff0c;可确保网站的安全可信。部署了SSL证书的网站打开后&#xff0c;在浏览器地址栏处会有安全锁标志。而…

台灯显色指数多少好?推荐显色指数优秀的护眼台灯

台灯的显色指数是其非常重要的指标&#xff0c;它可以表示灯光照射到物体身上&#xff0c;物体颜色的真实程度&#xff0c;一般用平均显色指数Ra来表示&#xff0c;Ra值越高&#xff0c;灯光显色能力越强。常见的台灯显色指数最低要求一般是在Ra80以上即可&#xff0c;比较好的…

Pyecharts绘图教程(2)—— 绘制多种折线图(Line)参数说明+代码实战

文章目录 &#x1f3af; 1 简介&#x1f3af; 2 图表配置项2.1 导入模块2.2 数据配置项2.3 全局配置项 &#x1f3af; 3 代码实战3.1 基础折线3.2 平滑曲线&#xff08;is_smooth&#xff09;3.3 阶梯折线&#xff08;is_step&#xff09;3.4 空值过渡&#xff08;is_connect_n…

Hadoop3教程(三十三):(生产调优篇)慢磁盘监控与小文件归档

文章目录 &#xff08;161&#xff09;慢磁盘监控&#xff08;162&#xff09;小文件归档小文件过多的问题如何对小文件进行归档 参考文献 &#xff08;161&#xff09;慢磁盘监控 慢磁盘&#xff0c;是指写入数据时特别慢的一类磁盘。这种磁盘并不少见&#xff0c;当机器运行…

JavaWeb配置Servle

在Java Web开发中&#xff0c;数据流主要遵循以下流程&#xff1a; 用户在浏览器中输入URL或点击链接&#xff0c;发送HTTP请求到服务器。服务器接收到请求后&#xff0c;根据请求的URL找到对应的Servlet。Servlet处理请求&#xff0c;可能需要查询数据库或执行其他业务逻辑。…

基于SSM的电子设备销售网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

强化学习 | Python强化学习

强化学习在近年来取得了巨大的突破,使机器能够在不断的试错中自动学习并做出决策。 本文将介绍强化学习的基本概念、原理和应用,同时提供详细的公式解释和Python代码示例。 强化学习是什么? 强化学习是一种机器学习方法,用于让智能体(例如机器人、自动驾驶汽车或游戏玩家…