首页 > 其他分享 >【剑指offer】-栈的压入、弹出序列-20/67

【剑指offer】-栈的压入、弹出序列-20/67

时间:2023-05-24 15:06:40浏览次数:36  
标签:20 压入 int 元素 弹出 67 序列 stack


1. 题目描述

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

2. 题目分析

  1. 题目的大致意思是:给你一个栈压入序列A:1 2 3 4 5 ,让你判断第二个序列B是不是该栈的弹出序列
  2. 我们运用一个辅助栈C,将栈A依次压入辅助栈C中,每压一次,判断该压入的元素是不是序列B的首数值。是的话,依次遍历序列B,不是的话,重复压入辅助栈

3. 题目图解

  1. 我们可以看到当1压入栈时,栈C的最上面的元素和弹出序列不同,进行压入操作。
  2. 当压入2时,栈C的最上面的元素和弹出序列不同,进行压入操作。
  3. 当压入3时,栈C的最上面的元素和弹出序列不同,进行压入操作。

【剑指offer】-栈的压入、弹出序列-20/67_入栈


4. 当压入4时,栈C最上面的元素和弹出序列相同,我们把4出栈,并且比较弹出序列的下一个元素。

【剑指offer】-栈的压入、弹出序列-20/67_压栈_02


5. 继续比较栈C的最上面的元素和弹出序列是否一样。我们可以看到此时不一样,所以,继续进行入栈操作。

【剑指offer】-栈的压入、弹出序列-20/67_压栈_03

  1. 比较栈C的最上面的元素和弹出序列是否一样。一样的话栈C进行出栈操作,弹出序列指针下移。
  2. 重复以上操作,最后判断辅助栈C里面是否为空,来判断是不是原序列的弹出序列。

4. 题目代码

public class Test19 {

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

	public static void main(String[] args) {
		int[] a = new int[] { 1, 2, 3, 4, 5 };
		int[] b = new int[] { 4, 5, 3, 2, 1 };
		boolean flag = false;
		flag = IsPopOrder(a, b);
		System.out.println(flag);
	}

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


标签:20,压入,int,元素,弹出,67,序列,stack
From: https://blog.51cto.com/u_16127529/6340825

相关文章

  • 【剑指offer】-把二叉树打印成多行-43/67
    1.题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。2.题目分析非常经典的一道二叉树的题目,做这道题之前需要掌握二叉树的思想和BFS(广度优先搜索、队列思想)我们可以回顾一下最基本的层次遍历,我们是用一个队列来进行存储初始root结点,然后依次放入root的......
  • 【力扣每日一题】1207. 独一无二的出现次数
    没想到C#的修改value值,可以直接dis[key]=value进行修改~~~1.题目描述2.题目分析每个数字在数组中出现的次数是独一无二的思路一:桶排,看了看数据范围,挺小,可以桶排思路二:字典(HashMap),最后Value都是等于1的返回true3.题目代码publicstaticboolUniqueOccurrences(int[]arr)......
  • 【剑指offer】- 求1+2+3+...+n -47/67
    1.题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。2.题目分析对于这种求1+2+3+…+n的题,我们可以采取3中方法第一种:直接利用等差数列的思想来进行求和return(1+n)*n/2;第二种:利用迭代的思想进行求和intres=......
  • C#开发环境配置-VS2017安装使用
    工欲善其事,必先利其器传说中的世界第一编辑器目录1.下载2.安装2.1点击下图2.2进行解析2.3启动3.自己的第一个程序4.问题1.下载资源是楼主花钱在淘宝买的,现在免费送给大家关注公众号”爱敲代码的小黄“,回复:VS2017,即可收到网盘链接 2.安装2.1点击下图2.2进行解析进度条加......
  • 【剑指offer】- 数组中重复的数字 -48/67
    1.题目描述在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例1:输入:[2,3,1,0,2,5,3]输出:2或32.题目分析此题考查的是面试者的沟通能力,......
  • HEUCPC2021
    stralReflection在\([1,n]\)上支持如下操作:操作一:学习一个新的技能——清除\([l,r]\)内所有的陨石操作二:给定一个点集\(k\)代表陨石出现在这些位置,询问最少需要使用多少技能才能清除所有陨石(不能使用当前没有学习的技能)共操作\(m\)次\(\sumk\leq1e5\)\(m\leq1e5\)......
  • SSRFmap-20230329
    Usage:ssrfmap.py[-h][-rREQFILE][-pPARAM][-mMODULES][-l[HANDLER]][-v[VERBOSE]][--lhostLHOST][--lportLPORT][--rfiles[TARGETFILES]][--uagentUSERAGENT][--ssl[SSL]][--proxyPROXY][--level[LEVEL]]选项:-h,--help显示此帮助......
  • 2023.5.24-人件-5月份读后感2
    最近,我阅读了人件的下一部分,有了一些感想。过去,我对于办公环境的重视程度不够。假设除了现在的职责之外,还让你负责为手下提供办公环境和公益设施。你必须为每个人确定工作环境的种类、分配的开支总数等等,而你如何着手做这些事呢?在以后,可以更加重视办公的环境。过去,我认为加班是......
  • C/C++超市商品管理系统[2023-05-24]
    C/C++超市商品管理系统[2023-05-24]9、超市商品管理系统问题描述:设计并实现一个超市商品管理系统,商品需设置不同的类型,系统可以实现对商品信息的添加,修改,删除,查找等功能,商品信息需要以文件方式保存到计算机硬盘中。基本功能:(1)商品要设置不同的类型,如水果、饮料等;(2)商品信息包......
  • 《Linux的文件目录类指令 20条》
    文件目录类的指令1.pwd指令查看当前目录 2.ls 指令查看当前目录所有内容信息ls-a显示当前目录所有的文件和目录,包括隐藏的ls-l以列表的方式显示信息ls-al或la-al举个栗子 3.cd指令基本语法cd[参数](切换到指定目录)cd~或者cd回到自己的家目录cd../......