首页 > 其他分享 >【剑指 Offer】 31. 栈的压入、弹出序列

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

时间:2023-04-17 14:00:33浏览次数:40  
标签:popped 压入 Offer 31 pop pushed push 序列

【题目】

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {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 <= pushed.length == popped.length <= 1000
    0 <= pushed[i], popped[i] < 1000
    pushed 是 popped 的排列。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof

【思路】

用一个栈来保存输入的序列,每次压入一个数,然后遍历栈,如果栈顶的值符合出栈顺序,就出栈,然后继续遍历看是否符合下一个值。直到所有数压入栈后,判断栈是否为空,如果不为空,说明有数无法按给定顺序出栈。

 

【代码】

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        int i = 0;
        Stack<Integer> s = new Stack<>();
        for(int num:pushed){
            s.push(num);
            while(!s.isEmpty()&&s.peek()==popped[i]){
                s.pop();
                i++;
            }
        }
        return s.isEmpty();
    }
}

 

标签:popped,压入,Offer,31,pop,pushed,push,序列
From: https://www.cnblogs.com/End1ess/p/17325647.html

相关文章

  • 【剑指 Offer】 29. 顺时针打印矩阵
    【题目】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix= [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7] 限制:0<=matrix.leng......
  • KubeSphere 社区双周报 | OpenFunction 支持 Dapr 状态管理 | 2023.03.31-04.13
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.03.31-2023.04.13。贡献者名单新晋KubeSphereCon......
  • 131. 分割回文串
    classSolution{public:boolcheck(strings){intn=s.size();for(inti=0;i<n/2;i++)if(s[i]!=s[n-i-1])returnfalse;returntrue;}vector<vector<string>>res;vecto......
  • 【剑指 Offer 】62. 圆圈中最后剩下的数字
    【题目】0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的......
  • 【剑指 Offer】 57 - II. 和为s的连续正数序列
    【题目】输入一个正整数target,输出所有和为target的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例1:输入:target=9输出:[[2,3,4],[4,5]]示例2:输入:target=15输出:[[1,2,3,4,5],[4,5,6],[7,8]] 限制:   1<=target......
  • ELEC3115 ENGINEERING
    ELEC3115–ELECTROMAGNETICENGINEERINGPartBassignment–T12023DueDate:23:59pm,Monday24thApril2020(Week11)AssignmentssubmittedaftertheDueDatewillbepenalizedbya20%marksreduction.CutoffDate:23:59pm,Tuesday25thApril2020(Week11)......
  • 剑指 Offer 64. 求1+2+…+n
    题目链接:剑指Offer64.求1+2+…+n方法:逻辑运算符短路原则解题思路例如:对于表达式\(A&&B\),若\(A\)为\(false\),那么就不会计算\(B\);代码classSolution{public:intsumNums(intn){n&&(n+=sumNums(n-1));returnn;}};复杂度......
  • 剑指 Offer 60. n个骰子的点数
    题目链接:剑指Offer60.n个骰子的点数方法:动态规划解题思路\(n=1\)时可能的和为\([1,6]\),其概率为\(dp[1][]=[1/6,1/6,1/6,1/6,1/6,1/6]\)\(n=2\)时对于第一个骰子为\(1\)时,第二个骰子可以为\([1,6]\),其可以构成的和为\([2,7]\),分别为其中的和\([i+......
  • [P4317 花神的数论题]题解
    P4317花神的数论题【数位DP】题目描述最开始其实没有什么想法第一次遇见数位dp求相乘的题想就按照常规做法来做,但不知道如何去处理*于是写了一个错误的代码//当前枚举到第id位,前面的1的个数为sum,是否达到上限limitlldfs(intid,intsum,intlimit){//1.出口if(id==......
  • [附CIFAR10炼丹记前编] CS231N assignment 2#5 _ pytorch 学习笔记 & 解析
    pytorch环境搭建课程给你的环境当中,可以直接用pytorch,当时其默认是没有给你安装显卡支持的.如果你只用CPU来操作,那其实没什么问题,但我的电脑有N卡,就不能调用. 考虑到我已有pytorch环境(大致方法就是确认pytorch版本和对应的cuda版本安装cuda,再按照官网即可,建议自......