• PHP 输入两个整数序列。其中一个序列表示栈的push 顺序, 判断另一个序列有没有可能是对应的pop 顺序


    <?php
        #输入一个栈的压栈序列和一个弹栈序列,判断该弹栈序列是否可能是压栈序列的输出
        #例如压栈序列 12345,则弹栈序列可以是 54321 或者 45321
    
        #解题思路,建一个空栈,按照压栈序列入栈,当压入的栈顶元素与弹栈序列的指针指向元素相同时,将元素弹出
        #直到将压栈序列的元素全部压完,如果弹栈序列是正确的,则最后栈内元素可以按照弹栈序列顺序弹出,最后栈为空
        #否则栈不为空
        function test($push, $pop) {
            $len = count($push);
            $stack = array();
            $i = 0;
            $j = 0;
            while ($i < $len) {
                array_push($stack, $push[$i]);
                $i++;
    
                echo "before: ";
                print_r($stack);
                while (!empty($stack) && $stack[count($stack) - 1] == $pop[$j]) {
                    array_pop($stack);
                    $j++;
                }
                echo "<br>after: ";
                print_r($stack);
                echo "<br>";
                echo "<br>";
            }
    
            return empty($stack);
        }
    
        $push = array(1, 2, 3, 4, 5);
        $pop = array(4, 5, 3, 1, 2);
    
        $t = test($push, $pop);
        var_dump($t);
    ?>

    before: Array ( [0] => 1 ) 
    after: Array ( [0] => 1 ) 

    before: Array ( [0] => 1 [1] => 2 ) 
    after: Array ( [0] => 1 [1] => 2 ) 

    before: Array ( [0] => 1 [1] => 2 [2] => 3 ) 
    after: Array ( [0] => 1 [1] => 2 [2] => 3 ) 

    before: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) 
    after: Array ( [0] => 1 [1] => 2 [2] => 3 ) 

    before: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 5 ) 
    after: Array ( [0] => 1 [1] => 2 ) 

    bool(false)

  • 相关阅读:
    JDBC链接mysql
    javac和java的使用
    PreparedStatement的execute误解
    sleep() 与 wait()的比较
    使用java程序模拟页面发送http的post请求
    《算法竞赛入门经典》6.1.2栈和队列-铁轨
    《算法竞赛入门经典》6.1栈和队列-卡片游戏
    《算法竞赛入门经典》5.42数学基础-因子和阶乘
    《算法竞赛入门经典》5.41数学基础-Cantor的数表
    qsort函数
  • 原文地址:https://www.cnblogs.com/zemliu/p/2710538.html
Copyright © 2020-2023  润新知