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

news2024/11/25 20:17:32

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

文章目录

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

💗题目描述 💗:

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

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

相关文章

C++标准模板(STL)- 类型支持 (运行时类型识别,bad_typeid,bad_cast )

运行时类型识别 定义于头文件 <typeinfo> 当 typeid 表达式中的实参为空值时抛出的异常 std::bad_typeid class bad_typeid : public std::exception; 此类型的异常在应用 typeid 运算符到多态类型的空指针值时抛出。 成员函数 (构造函数) 构造新的 bad_typeid 对象 (…

如何正确维护实验室超声波清洗机

实验室一直被视作一个严谨且严肃的场所&#xff0c;在其中所做的试验都需要遵照一定流程&#xff0c;所用的设备也经过了细致化挑选&#xff0c;例如实验室超声波清洗机&#xff0c;其性能远强于普通类别的清洗机。专门负责采购的实验室人员&#xff0c;通常会对质量优服务好的…

Auth.js:多合一身份验证解决方案 | 开源日报 No.60

nodejs/node Stars: 96.2k License: NOASSERTION Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。它具有以下关键特性和核心优势&#xff1a; 强大&#xff1a;Node.js 提供了强大且高效的服务器端运行能力&#xff0c;可以处理并发请求&#xff0c;并支持异步编程…

[CSP-S 2023] 种树 —— 二分+前缀和

This way 题意&#xff1a; 一开始以为是水题&#xff0c;敲了一个二分贪心检查的代码&#xff0c;20分。发现从根往某个节点x走的时候&#xff0c;一路走来的子树上的节点到已栽树的节点的距离会变短&#xff0c;那么并不能按照初始情况贪心。 于是就想着检查时候用线段树…

Notepad++正则查询替换操作

Notepad编辑器查找功能非常强大&#xff0c;本处记录一些实战中常用到复杂查询替换操作。 注意&#xff1a;如果是重要文件&#xff0c;替换操作前最好备份&#xff1b;当前一个操作后也可以用ctrlz恢复。 查找重复行 用查找(ctrlf)功能&#xff0c;用正则表达式模式匹配。 查…

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

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

C# Onnx Yolov8 Detect 戴安全帽检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

基于SSM的图书商城网站设计与实现

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

面试题:说一下Redis中有哪些阻塞点以及如何解决?

文章目录 前言有哪些影响redis性能的因素客户端的阻塞磁盘带来的阻塞主从节点带来的阻塞切片集群的阻塞异步机制解决阻塞异步是如何进行的异步删除lazy-free小结 Redis 中的优秀设计有很多&#xff0c;今天我们一起来聊聊群友刷题遇到的&#xff1a;“Redis的异步机制 —— red…

网络协议--动态选路协议

10.1 引言 在前面各章中&#xff0c;我们讨论了静态选路。在配置接口时&#xff0c;以默认方式生成路由表项&#xff08;对于直接连接的接口&#xff09;&#xff0c;并通过route命令增加表项&#xff08;通常从系统自引导程序文件&#xff09;&#xff0c;或是通过ICMP重定向…

[SQL开发笔记]SELECT DISTINCT语句:返回唯一不同的值

一、功能描述&#xff1a; 使用场景&#xff1a;在表中&#xff0c;一个列可能会包含多个重复值&#xff0c;希望仅仅列出不同&#xff08;distinct&#xff09;的值&#xff0c;我们需要怎么办呢&#xff1f;可以SELECT DISTINCT语句用于返回唯一不同的值 二、SELECT Distinc…

【Unity ShaderGraph】| 快速制作一个 钛金化不锈钢效果

前言 本文将使用ShaderGraph制作一个 钛金化不锈钢 效果&#xff0c;可以直接拿到项目中使用。对ShaderGraph还不了解的小伙伴可以参考这篇文章&#xff1a;【Unity ShaderGraph】| Shader Graph入门介绍 | 简介 | 配置环境 | 窗口介绍 | 简单案例下面就开始看一下具体的制作流…

多元高斯分布全解析

大纲 公式推导参数估计高斯分布运算高斯分布性质高斯过程&#xff08;Gaussian process&#xff09; 概念区分 边缘分布(marginal distribution)和联合分布概率密度函数和概率分布函数 1. 多元高斯分布公式推导 首先我们知道一元高斯分布是&#xff1a; N ( x ∣ u , σ 2…

2023年【北京市安全员-B证】考试试卷及北京市安全员-B证模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 北京市安全员-B证考试试卷考前必练&#xff01;安全生产模拟考试一点通每个月更新北京市安全员-B证模拟考试题题目及答案&#xff01;多做几遍&#xff0c;其实通过北京市安全员-B证在线考试很简单。 1、【多选题】《…

轻松合并Excel工作表:Java批量操作优化技巧

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 在Excel中设计表单时&#xff0c;我们经常需要对收集的信息进行统计分析。例如&a…

web自动化测试——跨平台设备管理方案Selenium Grid

跨平台设备管理方案Selenium Grid 一、Selenium Grid简介二、使用场景场景一&#xff1a; 实现分布式执行测试&#xff0c;提高执行效率场景二&#xff1a; 解决浏览器兼容性问题新特性 三、Selenium Grid4原理分析四、环境安装五、运行方式&#xff1a;单机运行 - 独立模式1. …

SpringCloud之OpenFeign调用解读

目录 基本介绍 引进 OpenFeign概述 OpenFeign作用 FeignClient EnableFeignClients Java代码实战 实战架构 父工程pom文件 teacher-service服务 student-service服务 测试 自定义配置 基本介绍 引进 如果我们利用RestTemplate发起远程调用的代码时会存在一些…

docker部署nginx并设置挂载

前言&#xff1a; 最近在学习docker和nginx&#xff0c;因为容器在运行过程中&#xff0c;相关的配置文件及日志都会存在容器内。对容器以来较高&#xff0c;当容器不存在的时候。所有的文件也就都没有了。并且当需要查看日志&#xff0c;修改配置文件的时候必须进入到容器内部…

JavaWeb配置Servle

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

Docker笔记-docker搭建nginx及移植

从官网找到对应的镜像&#xff1a; ​​​​​​https://hub.docker.com/_/nginx/tags 查看镜像 docker images 运行容器&#xff0c;然后将配置文件等拷贝到主机上&#xff1a; docker run --name nginx -d nginx 拷贝路径&#xff1a; docker cp nginx:/etc/nginx/nginx…