(栈队列堆) 剑指 Offer 31. 栈的压入、弹出序列 ——【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 之前弹出。

提示

  • 0 < = p u s h e d . l e n g t h = = p o p p e d . l e n g t h < = 1000 0 <= pushed.length == popped.length <= 1000 0<=pushed.length==popped.length<=1000
  • 0 < = p u s h e d [ i ] , p o p p e d [ i ] < 1000 0 <= pushed[i], popped[i] < 1000 0<=pushed[i],popped[i]<1000
  • pushedpopped 的排列。

注意:本题 946. 验证栈序列 相同!

💡思路:栈模拟

使用一个栈 temp 来模拟压入弹出操作。

  • 每次入栈一个元素后,都要判断一下栈顶元素是不是当前出栈序列 popped 的第一个元素
    • 如果是的话则执行出栈操作并将 popped 往后移一位,继续进行判断。

遍历数组 pushed 结束之后,每个元素都按照数组 pushed 的顺序入栈一次。如果栈为空,则每个元素都按照数组 popped 的顺序出栈,返回 true。如果栈不为空,则元素不能按照数组 popped 的顺序出栈,返回 false

🍁代码:(C++、Java)

C++

class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        int n = pushed.size();
        stack<int> temp;
        for(int pushIndex = 0, popIndex = 0; pushIndex < n; pushIndex++){
            temp.push(pushed[pushIndex]);
            while(!temp.empty() && temp.top() == popped[popIndex]){
                temp.pop();
                popIndex++;
            }
        }
        return temp.empty();
    }
};

Java

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        int n = pushed.length;
        Stack<Integer> temp = new Stack<>();
        for(int pushIndex = 0, popIndex = 0; pushIndex < n; pushIndex++){
            temp.push(pushed[pushIndex]);
            while(!temp.isEmpty() && temp.peek() == popped[popIndex]){
                temp.pop();
                popIndex++;
            }
        }
        return temp.isEmpty();
    }
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 为数组 pushedpopped 的长度。需要遍历数组 pushedpopped 各一次,判断两个数组是否为有效的栈操作序列。
  • 空间复杂度 O ( n ) O(n) O(n),空间复杂度主要取决于栈空间,栈内元素个数不超过 n

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【字符串编码解码问题】

字符串中编码解码问题 1.编码 byte[] getBytes()&#xff1a;使用平台的默认字符集将该String编码为一系列字节&#xff0c;将结果存储到新的字节数组中byte[] getBytes(String charsetName)&#xff1a;使用指定的字符集将该String编码为一系列字节&#xff0c;将结果存储到…

AHB协议理解

从小父亲就教育我&#xff0c;做一个对社会有用的人&#xff01; 目录 Chapter1 AHB Block Diagram Ginput signal lnput signals Output Signal Chapter3 Transfers AHB接口Overview Chapter6 Data Buses HWDATA HRDATA Chapter1 Introduction AHB: Advanced High-performanc…

ubuntu创建多用户并使用ssh链接

添加多个同时登录的用户 以下内容中的“username”根据自己需求自己定义 1.创建新用户 sudo useradd username2.给新用户添加管理权限 sudo vim /etc/sudoers打开的文件中添加如下内容 username ALL(ALL:ALL) ALL3.设置密码 输入&#xff1a; sudo passwd username打开的…

创建型模式 - 原型模式

概述 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 结构 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具体原型对象必须实现的的 clone() 方法。 具体原型类&#xff1a;实现抽象原型类的 clone() 方…

2023年牛客暑假多校-1 - J.Roulette题解

传送门&#xff08;lduoj&#xff09; 题目描述 Walk Alone is playing roulette, a kind of gambling. For simplification, we assume its rules and steps as follows: The whole gambling process composes of many turns.In the i-th turn:Walk Alone can choose an i…

Apache Doris (二十八):Doris 数据导入(六)Spark Load 1- 原理及配置

目录 1. 基本原理 2. Spark集群搭建 2.1 Spark Standalone 集群搭建 2.2 Spark On Yarn 配置 3. Doris配置Spark与Yarn 3.1 Doris配置Spark 3.2 Doris配置Yarn 进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质…

如何为HashMap设置初始化大小

如何为HashMap设置初始化大小 1.阿里巴巴代码规范的要求2.使用阿里巴巴插件扫描时3. 源码3.1 当初始化不设置大小时3.2 当初始化设置大小时 4. 测试附录 1.阿里巴巴代码规范的要求 2.使用阿里巴巴插件扫描时 3. 源码 3.1 当初始化不设置大小时 Map<Integer, BigDecimal>…

高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测技术

能源是国民经济发展和人民生活必须的重要物质基础。在过去的200多年里&#xff0c;建立在煤炭、石油、天然气等化石燃料基础上的能源体系极大的推动了人类社会的发展。但是人类在使用化石燃料的同时&#xff0c;也带来了严重的环境污染和生态系统破坏。近年来&#xff0c;世界各…

Spingboot 多模块引入第三方jar包

1. 在需要的模块中引入jar包 2. 在此模块中的pom.xml 中引用 3. 要想打包部署服务器&#xff0c;需要在启动模块中添加配置信息 ps&#xff1a;启动模块要引用此模块才能将此一起jar打包部署 <build><plugins><plugin><groupId>org.springframework.…

MySQL备份与还原/索引/视图

MySQL备份与还原/索引/视图练习 文章目录 一、备份与还原1、使用mysqldump命令备份数据库中的所有表2、备份booksDB数据库中的books表3、使用mysqldump备份booksDB和test数据库4、使用mysqldump备份服务器中的所有数据库5、使用mysql命令还原第二题导出的book表6、进入数据库使…

牛顿修正法在二阶近似方法中的应用

使用optimtool的牛顿修正法来应用学习 pip install optimtool --upgrade pip install optimtool>2.4.2optimtool包所依据的理论支撑中&#xff0c;还没有为二阶微分方法作邻近算子的近似与修正&#xff0c;所以二阶近似方法是研究无不可微项的可微函数的算子。 牛顿修正法…

C\C++ 使用socket判断ip是否能连通

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 使用socket判断ip是否能联通 效果&#xff1a; 代码&#xff1a; #include <iostream> #include <cstdlib> #include <cstdio> #include &…

soci源码解析

结构 use_type into_type statement backend 针对不同数据库后端的抽象 session 参考资料&#xff1a; https://soci.sourceforge.net/

快7月底了,让我康康有多少准备跳槽的

前两天跟朋友感慨&#xff0c;今年的铜三铁四、裁员、疫情影响导致好多人都没拿到offer!现在已经快7月底了&#xff0c;具体金九银十只剩下2个月。 对于想跳槽的职场人来说&#xff0c;绝对要从现在开始做准备了。这时候&#xff0c;很多高薪技术岗、管理岗的缺口和市场需求也…

一篇文章带你用Jenkins和Kubernetes搭建DevOps平台

JenkinsKubernetes实现DevOps DevOps 介绍Jenkins环境准备准备JDK下载jdk安装jdk配置jdk环境变量 准备maven下载maven解压maven配置maven配置maven环境变量 安装Docker安装git 安装Jenkins初始化jenkins准备代码仓库和docker镜像仓库准备Kubernetes准备java项目搭建DevOps创建代…

【Android知识笔记】应用进程(二)

Service的启动原理 向AMS发送startService请求 startService时会首先拿到AMS的Binder代理对象,向AMS发起startService请求: AMS处理startService请求 接下来看AMS端处理应用的startService请求: 回忆一下应用进程启动流程: 接下来看如果Service所在应用进程没有启动的情…

10分钟理解RNN、LSTM、Transformer结构原理!

文章目录 一、RNN1.1 RNN基本架构1.2 RNN经典的三种结构1.2.1 vector-to-sequence结构1.2.2 sequence-to-vector结构1.2.3 Encoder-Decoder结构 1.3 RNN常用领域1.4 RNN的优缺点1.5 RNN中为什么会出现梯度消失 二、LSTM2.1 LSTM与RNN差异2.2 LSTM核心思想图解2.2.1 忘记层门2.2…

微信小程序的目录解析--【浅入深出系列002】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择先说总目录经常碰到的文件(目录&#xff09;最最常见的目录pages次最常用的就是images 目录 操作起来真正的操作 配套资源作业&#xff1a; 本系列校训 用免费公开视…

简笔风和写实风的区别

现实主义和风格化 当我们谈论现实主义和风格化时&#xff0c;我们是什么意思&#xff1f;这看起来相当明显&#xff0c;现实主义指的是模仿逼真的逼真的图形。它不一定需要存在于现实世界中&#xff0c;但被传达为它属于我们的世界。10年前&#xff0c;我们认为现实的东西在今…

剑指offer33.二叉搜索树的后序遍历序列

我一开始的想法是&#xff1a;后序遍历是左右根&#xff0c;那么第一个数小于第二个数&#xff0c;第二个数大于第三个数&#xff0c;然后从第三个数开始又循环&#xff0c;显然错了&#xff0c;因为我这种是理想情况&#xff0c;是一个满二叉树。正确的解法是: class Solutio…