zoukankan      html  css  js  c++  java
  • 第29题:推断一个序列是否是还有一个push序列的pop序列

    github:https://github.com/frank-cq/MyTest

    第29题:输入两个整数序列,当中一个序列表示栈的push顺序,推断还有一个序列有没有可能是相应的pop顺序。为了简单起见,我们如果push序列的随意两个整数都是不相等的。比方输入的push序列是 1、2、3、4、5。那么4、5、3、2、1 就有可能是一个pop序列,由于能够有例如以下的push和pop序列:push 1, push 2, push 3, push 4,pop, push 5, pop, pop, pop, pop。这样得到的pop序列就是4,5,3,2,1.但序列4,3,5,1,2就不可能是push序列1、2、3、4、5的pop序列。


    代码

    package test029;
    
    import java.util.Stack;
    
    /**
     * Created by cq on 2015/6/28.
     * 第29题:输入两个整数序列,当中一个序列表示栈的push顺序,推断还有一个序列有没有可能是相应的pop顺序。

    * 为了简单起见,我们如果push序列的随意两个整数都是不相等的。比方输入的push序列是 1、2、3、4、5,那么 * 4、5、3、2、1 就有可能是一个pop序列,由于能够有例如以下的push和pop序列:push 1, push 2, push 3, push 4, * pop, push 5, pop, pop, pop, pop。这样得到的pop序列就是4,5,3,2,1.但序列4,3,5,1,2就不可能是push序列 * 1、2、3、4、5的pop序列。 */ public class Test029 { public static boolean isCorrespondPopOrder(int[] pushArr, int[] popArr){ if (pushArr.length != popArr.length){ return false; } Stack<Integer> stack = new Stack<Integer>(); int i = 0, j = 0; while (i < popArr.length){ //入栈 while (j < pushArr.length){ stack.push(pushArr[j]); j++; if (pushArr[j-1] == popArr[i]){ break; } } //出栈 int top = stack.pop(); //获取栈顶元素 while (i < popArr.length){ //栈顶元素等于出栈序列当前元素,则继续出栈 if (top == popArr[i]){ i++; if (stack.isEmpty()){ //栈已空,跳出循环 break; } top = stack.pop(); } //栈顶元素不等于出栈序列当前元素。恢复栈顶元素 else { stack.push(top); break; } } //正确情况下。入栈已经完成,那么出栈也完成,由于入栈在出栈之前 if (j == pushArr.length){ break; } } return stack.isEmpty(); } public static void main(String[] args){ int[] pushArr = {1,2,3,4,5}; int[] popArr = {4,5,3,2,1}; int[] popArr2 = {4,3,5,1,2}; System.out.println("4,5,3,2,1 是 1,2,3,4,5 的一个出栈序列:"+isCorrespondPopOrder(pushArr,popArr)); System.out.println("4,3,5,1,2 是 1,2,3,4,5 的一个出栈序列:"+isCorrespondPopOrder(pushArr,popArr2)); } }




    运行结果

    Connected to the target VM, address: '127.0.0.1:25254', transport: 'socket'
    Disconnected from the target VM, address: '127.0.0.1:25254', transport: 'socket'
    4,5,3,2,11,2,3,4,5 的一个出栈序列:true
    4,3,5,1,21,2,3,4,5 的一个出栈序列:false
    
    Process finished with exit code 0
  • 相关阅读:
    解决调用未定义 swoole_async_readfile函数问题
    7000字 Redis 超详细总结笔记总 | 收藏必备!
    C/C++语言编程修养
    glib 队列
    sprintf 详解
    json 需替换 特殊字符串
    glib 关系
    glib 简介
    gprof 代码效率测量
    glib 树
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5350147.html
Copyright © 2011-2022 走看看