zoukankan      html  css  js  c++  java
  • 【Offer】[31] 【栈的压入、弹出序列】

    题目描述

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

    牛客网刷题地址

    思路分析

    1. 如果下一个弹出的数字刚好是栈顶数字,那么直接弹出;
    2. 如果下一个弹出的数字不在栈顶,则把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止;如果所有数字都压入栈后仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列

    测试用例

    1. 功能测试:输入的两个数组含有多个数字或者只有一个数字;第二个数组是或者不是第一个数组表示的压入序列对应的栈的弹出序列。
    2. 特殊输入测试:输入两个nullptr指针。

    Java代码

    public class Offer31 {
        public static void main(String[] args) {
            test1();
            test2();
            test3();
    
        }
    
        public static boolean IsPopOrder(int[] pushA, int[] popA) {
            return Solution1(pushA,popA);
        }
    
        private  static boolean Solution1(int[] pushA, int[] popA) {
            if(pushA==null || popA==null){
                  return false;
                }
                if(pushA.length!=popA.length || pushA.length==0){
                  return false;
                }
                Stack<Integer> stack = new Stack<Integer>();
                int popIndex  = 0;
                for(int pushIndex=0;pushIndex<pushA.length;pushIndex++){
                    stack.push(pushA[pushIndex]);
                    while(!stack.empty()&&stack.peek()==popA[popIndex]){
                        stack.pop();
                        popIndex++;
                    }
                }
                return stack.empty();
        }
    
        private static void test1() {
    
        }
    
        private static void test2() {
    
        }
    
        private static void test3() {
    
        }
    }
    

    代码链接

    剑指Offer代码-Java

  • 相关阅读:
    20150212-2015
    SM30维护视图添加按钮
    SAP保存操作记录CDHDR和CDPOS表
    20150123-慢慢
    20150124-轻轻
    维护 物料主数据 号码段
    ABAP DEMO-2018
    工具
    幽门螺杆菌资料收集
    MySQL 8 连接时出现 1251 和 2059 错误
  • 原文地址:https://www.cnblogs.com/haoworld/p/offer31-zhan-de-ya-ru-dan-chu-xu-lie.html
Copyright © 2011-2022 走看看