• 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)

  • 相关阅读:
    实现tip浮层
    c++实现冒泡排序
    一天一小段js代码(no.4)
    html5 css3实现图中结构
    html表格相关
    js跨浏览器的事件处理函数
    js实现DOM结构
    CSS3实现鼠标移动到图片上图片变大(缓慢变大,有过渡效果,放大的过程是有动画过渡的,这个过渡的时间可以自定义)
    正则表达式学习笔记
    使用JS与CSS3的翻转实现3D翻牌效果
  • 原文地址:https://www.cnblogs.com/zemliu/p/2710538.html
Copyright © 2020-2023  润新知