剑指offer系列之20:栈的压入弹出序列

剑指 Offer 31 栈的压入、弹出序列 💖💖感谢各位观看这篇文章,💖💖点赞💖💖、收藏💖💖、你的支持是我前进的动力!💖💖 💖💖感谢你的阅读💖,专栏文章💖持续更新!💖关注不迷路!!💖 🥝🥝 剑指 Offer 31. 栈的压入、弹出序列 🚄🚄 辅助栈 🚄🚄原地栈 阅读详情

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

思路:建立一个辅助栈,把输入的第一个序列中的数字依次压入该辅助栈,并按照第二序列的顺序依次从该栈中弹出数字。可以通过举例得到规律如下:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出,如果下一个数字不在栈顶,把压栈序列中还没有入栈的数字压入辅助栈,知道下一个需要弹出的数字在栈顶为止,如果所有的数字都压入栈,仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。
第一种实现:

public boolean IsPopOrder(int [] pushA,int [] popA) {
        if(pushA.length == 0 || popA.length==0){
            return false;
        }
        Stack<Integer> stack = new Stack<Integer>();
        int j = 0;
        for(int i = 0;i < pushA.length;i++){
            stack.push(pushA[i]);
            while(j<popA.length && stack.peek() == popA[j]){
                stack.pop();
                j++;
            }
        }
        return stack.isEmpty();

    }

第二种实现:

public boolean IsPopOrder(int[] pushA, int[] popA) {
        boolean possible = false;
        ArrayList<Integer> data = new ArrayList<Integer>();
        if (pushA.length > 0 && popA.length > 0 && pushA.length == popA.length) {
            int len = pushA.length;
            //当前元素
            int pop = 0;
            //下一个弹出的元素
            int nextPop = 0;

            int push = 0;
            //下一个压入的元素
            int nextPush = 0;

            int index = -1;
            while(nextPop - pop < len){
                //如果弹出的元素与第一个元素不相等就一直添加元素直到相等
                while(data.size() == 0 || data.get(index) != popA[nextPop]){
                    //当全部元素添加完毕之后,结束循环
                    if(nextPush - push == len) break;
                    data.add(pushA[nextPush]);
                    index++;
                    nextPush++;
                }

                if(data.get(index) != popA[nextPop]) break;
                //移除第一个比较的元素
                data.remove(index--);
                nextPop++;
            }
            //在集合全部元素比较完毕且弹出序列也比较完毕,返回true
            if(data.size() == 0 && nextPop - pop == len) possible = true;
        }
        return possible;
    }
刷题单向链表 实现一个数据结构,维护一张表(最初只有一个元素 11)。接下来 qq 行,每行表示一次操作,操作具体间题目描述。a[i] 里面放的是下一个元素,为0代表链表结束。如单链表1->4 -> 2->3->0用数组表示是。对于每个操作 2,输出一个数字,用换行隔开。第一行一个整数 qq 表示操作次数。 阅读详情

相关推荐

正点原子RK3588 Android 12镜像构建实战:从环境配置到烧录验证全指南

本文提供了一份基于正点原子RK3588开发板的Android 12镜像构建全流程实战指南。内容涵盖从Ubuntu环境配置、SDK获取、编译内核与系统,到最终镜像打包与烧录验证的完整步骤,并分享了内核驱动定制与系统优化技巧,旨在帮助开发者高效完成瑞芯微RK3588平台的系统定制工作。

grass的博客 811

剑指offer系列——剑指 Offer 31. 栈的压入、弹出序列

大家好!本篇文章将介绍的剑指offerOJ题,来自力扣[剑指 Offer 31. 栈的压入、弹出序列],本文将以这道题为背景,介绍栈不可能的出栈序列,展示代码语言暂时为:Java,如果你对栈还不是很熟悉,建议阅读:栈与Stack类。

未见花闻的博客 1226

如何用Deep OC-SORT提升多目标跟踪精度?实战配置与性能优化指南

本文是一份针对开发者的Deep OC-SORT多目标跟踪实战指南。详细解析了如何通过部署其核心的“动态外观记忆”与“相机防抖”模块来有效应对遮挡与抖动,从而显著提升跟踪精度与连续性。内容涵盖从环境搭建、参数调优到性能压榨的全流程,并提供针对不同场景的配置建议与工程落地技巧。

f9g0h的博客 670

剑指offer-栈的压入、弹出序列(C++)

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 算法思想 将第一个序列数据先压栈,如果最上面的数据与第二个需要弹出的数据相同,进行判断...

while10的博客 821

头歌 DNS协议分析第3关----DNS 报文分析

DNS 报文分析

qq_67667368的博客 4347

跨模型的 API 调用与集成:使用 Spring AI 构建可移植的 API 代码,支持多个 AI 模型(如 OpenAI、Anthropic 等)的调用

Spring AI 是 Spring 生态系统中的一部分,旨在提供一种简单、可扩展的方式来集成人工智能模型。Spring AI 使得开发者可以使用现有的 Spring 体系结构方便地访问多种 AI 模型和服务,例如 OpenAI、Anthropic、HuggingFace 等。

秋元的博客 2404

[剑指Offer]栈的压入、弹出序列(Java)

剑指Offer题目 栈的压入、弹出序列 -- newcoder 剑指Offer 21 题目描述 * 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。 * 假设压入栈的所有数字均不相等。 * * 例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列, * 但4,3,5,1,2就不可能是该压栈序列的弹出序...

聚沙成塔 455

SRAM compiler中 Number of banks 设置

的值时,需要考虑应用的性能需求、功耗要求和面积限制。设计者应根据具体的应用场景选择合适的bank数量,以优化整体系统性能。bank是一种用于分离存储器访问的设计结构,允许同时对不同的存储区域进行读写操作,从而提高存储器的并发访问性能。选项用于指定 SRAM 存储器的 并发存储区域。在 SRAM 编译器中,

hzmscut的博客 1872

21 图解剑指Offer 栈的压入、弹出序列 Java题解

21 图解剑指Offer 栈的压入、弹出序列 Java题解21 图解剑指Offer 栈的压入、弹出序列 Java题解题目链接题目描述题解:图解:代码:复杂度 21 图解剑指Offer 栈的压入、弹出序列 Java题解 题目链接 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意

Vaxue的博客 421

【RT-DETR涨点改进】全网独家-特征融合改进篇 | AAAI 2025 顶会| 高效涨点,RT-DETR利用CDFA对比度特征聚合模块,适用于目标检查(全网独家创新)

本文提出了一种基于CDFA模块的多级特征融合优化RT-DETR模型,用于解决医学图像分割中的软边界模糊、小目标和共现现象等问题。CDFA模块通过对比度特征聚合、局部特征增强和多级注意力机制,有效提升模型性能。研究提供了三种改进方案(rtdetr-r18/y50/l-CDFA),并在多个医学数据集上验证了其有效性。核心创新包括语义信息解耦、对比驱动特征融合和尺寸感知解码器。实验结果表明,该方法在分割精度和鲁棒性方面达到SOTA水平。

Ai缝合怪、助力小伙伴高效发论文 510

科技英语/专业英语——改错总结【2】

1.固定句式 make it + adj + 句子 例:These features make the electronic systems difficult to intercept this kind of signal. 正确形式:These features make it  difficult for the electronic systems  to intercept

MISAYAONE的博客 1732

剑指offer 栈的压入、弹出序列

剑指offer题型分类及各题的代码及解题思路 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 初始结构定义如下: class...

请叫我皮皮虾的博客 261

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

栈的压入、弹出序列

一、前言 《剑指Offer》中题31 二、题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。 三、思路 用一个栈模拟将队列1中的数据压人和根据队列...

行走 431

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

剑指offer-栈的压入、弹出序列

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 思路 借用一个辅助栈temp,遍历pushV,压栈temp,判断temp栈顶是不是po...

zero 340

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

剑指OFFER-栈的压入、弹出序列

剑指OFFER-栈的压入、弹出序列QuestionSolution辅助栈 Question 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 关键...

会有Mao的 237

剑指Offer(二十一):栈的压入、弹出序列

剑指Offer(二十一):栈的压入、弹出序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法、机器学习干货 csdn:https://blog.youkuaiyun.com/baidu_31657889/ github:https://github.com/aimi-...

chizhi2515的博客 229

【剑指offer】21-栈的压入与弹出序列

本文系《剑指offer》的刷题记录,通过牛客网在线平台测试通过。 在线测试平台:牛客网 编程资料获取:CodeLab 1-Description 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该...

心之所向,敝履以往 346

【剑指offer】面试题31 栈的压入 弹出序列

题目要求 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 解题思路 首先,我们需要一个辅助栈,以此来表示元素弹出的顺序。 具体的思路如下: (1...

爱喝舒化奶的博客 225

[剑指Offer]-栈的压入、弹出序列

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。假设压入栈的所有数字均不相等。 例如序列1>2>3>4>5是某栈的压栈序列,序列4>5>3>2>1是该压栈序列对应的一个弹出序列,但4>3>5>1>2就不可能是该压栈序列的弹出序列。 解题思路 将弹出栈序列的第一个元素和栈顶元素...

LeoByte的编程驿站 586

算法练习篇之:栈的压入、弹出序列 (栈)

算法练习篇之:栈的压入、弹出序列 (栈)题目描述解题思路图示代码实现总结 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 解题思路 题目给...

香农三定律的博客 407

【剑指offer】31.栈的压入、弹出序列

31.栈的压入、弹出序列 面试题31. 栈的压入、弹出序列 难度中等27 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed ...

芝兰生于深谷,不以无人而不芳 869

学习笔记 | Python版本 剑指 Offer 31. 栈的压入、弹出序列

剑指 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), pu

大虎牙的博客 342

剑指Offer: 栈的压入弹出序列

剑指Offer: 栈的压入弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。 假设压入栈的所有数字均不相等。 例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 注意:若两个序列长度不等则视为并不是一个栈的压入、弹出序列。若两个序列都为空,则...

Erice_s的博客 207

剑指offer——栈的压入、弹出序列

剑指offer——栈的压入、弹出序列 【题目描述】 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 【解题思路】 就是每个元素弹出的时候,判断该...

ma_ke_xin的博客 155
上一篇: 剑指offer系列之19:包含min函数的栈
下一篇: 剑指offer系列之21:从上往下打印二叉树
ly_main
博客等级 码龄11年 6粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值