关闭

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

标签: 数据结构剑指offer-java实现牛客网在线编程
309人阅读 评论(0) 收藏 举报
分类:

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


思路:
遍历待测试序列,如果当前元素在栈顶,出栈即可,否则,查看是否所有待入栈元素已入栈,如是说明当前元素在栈里面但又不在栈顶,显然出栈顺序错误,若没入栈,则按顺序从待入栈集合中入栈直到栈顶元素是当前元素,出栈…


AC代码:

import java.util.Stack;

public class Solution {
    public boolean IsPopOrder(int [] pushA,int [] popA) {
        //pushA或者popA为null,返回false
        if (pushA == null || popA == null){
            return false;
        }

        int m = pushA.length;
        int n = popA.length;

        Stack<Integer> stack = new Stack<>();

        //pushA或者popA里没有元素,返回false
        if ( m == 0 || n == 0){
            return false;
        }

        int start = 0;
        for(int i = 0 ; i < n ; i++){

            //如果栈顶元素与出栈元素不等,查看是否所有待入栈元素已入栈
            while(stack.isEmpty() ||stack.peek() != popA[i]){
                if ( start >= m){
                    return false;
                }
                stack.push(pushA[start++]);
            }
            //如是说明当前元素在栈里面但又不在栈顶,显然出栈顺序错误
            if ( stack.peek() != popA[i]){
                return false;
            }

            stack.pop();
        }
        return true;
    }
}
0
0
查看评论

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

剑指offer上的第22题,九度OJ上AC。 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是...
  • mmc_maodun
  • mmc_maodun
  • 2014-05-18 08:13
  • 3779

剑指Offer面试题22(Java版):栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。 假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压栈序列,序列,4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 解决这个问题很直观的...
  • jsqfengbao
  • jsqfengbao
  • 2015-08-03 20:00
  • 1839

面试题20:栈的压入、弹出序列

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

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

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

《剑指Offer》面试题:栈的压入弹出序列是否匹配

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

栈的压入、弹出序列和栈所有可能的弹出顺序

题目:输入两个整数序列,第一序列表示栈的压入顺序,判断第二个序列是否为该栈弹出顺序。经典的一个笔试题目。 首先学会判断某个弹出序列是否为某个栈的压入序列。 第一种方法通过进行全排列,然后检测是否满足弹入弹出顺序。 第二种方法直接利用递归,通过弹入次数与弹出次数关系进行递归调用。
  • huruzun
  • huruzun
  • 2014-03-24 20:14
  • 1436

(牛客网)栈的压入、弹出序列

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

剑指Offer:面试题22——栈的压入,弹出序列(java实现)

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

判断一个序列是否为另一个栈的出栈序列(栈的压入、弹出序列)

判断一个序列是否为另一个栈的出栈序列 【思路】借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的 第一个元素,这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元素,则将出栈顺序向 ...
  • l_tudou
  • l_tudou
  • 2016-07-25 11:31
  • 591

剑指Offer-->栈的压入、弹出序列(★★★★★)

栈的难度不大,但是在剑指Offer中很多题目涉及到此,其中的难度我觉得也没有很简单,为了要通过牛客网的编译还真是不简单,要考虑的东西还是蛮多的。。。毕竟要通过所有的测试用例。此题:栈的压入与弹出序列,对栈的应用我觉得还是很全面的,是一个非常不错的题目。其中部分代码也有所解释~ package ...
  • qq_21394609
  • qq_21394609
  • 2015-07-24 14:48
  • 428
    个人资料
    • 访问:155550次
    • 积分:4927
    • 等级:
    • 排名:第6843名
    • 原创:329篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论