zoukankan      html  css  js  c++  java
  • Swift处理堆栈问题——给定两组序列,其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序

    题目:输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。
    为了简单起见,我们假设push 序列的任意两个整数都是不相等的。
    比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列,但序列4、3、5、1、2 就不可能是push 序列1、2、3、4、5 的pop 序列。

    分析:

    我们首先定义遍历push的序数i=0  遍历pop序列的序数 j =0

    我们可以先遍历给出的push序列,并且时刻与pop序列的头元素pop[j]进行比较

    若找到与pop序列的头元素相同的push元素,则j向右移一位(移动完成后需要比较pop[j] 与当前的栈顶元素是不是相等,若相等则需要退出当前栈顶元素)

    若push已经遍历完成,但是j依然小于 pop的元素个数,则我们只需要继续比较pop中剩余的元素与当前栈中的元素是不是对应的即可

    代码:

    func judgeStackOrder(var pushArray:Array<Int>,var popArray:Array<Int>)->Bool{

        var tempStack = Stack<Int>()                  //构造一个tempStack的临时栈

        if(pushArray == [] || popArray == []){

            return false

        }

        if(pushArray.count != popArray.count){

            return false

        }

        var i = 0,j = 0

        for(i; i < pushArray.count ; i++){

            println(i)

            if(pushArray[i] != popArray[j]){

                println(pushArray[i])

                tempStack.push(pushArray[i])

            }

            else{

                tempStack.push(pushArray[i])

                tempStack.pop()

                if(tempStack.top() == popArray[j+1]){

                    tempStack.pop()

                    j++

                }

                j++

            }

        }

        if(j < popArray.count){

            

            while( j < popArray.count ){

                if(tempStack.top() != popArray[j] ){

                    println(tempStack.top())

                    popArray[j]

                    return false

                }

                else{

                    tempStack.pop()

                    j++

                    continue        //若当前栈顶元素等于当前j所处的pop序列的元素,则临时栈退栈,并且使j向右移动一个单位,跳入下一轮循环

                }

            }

            return true

        }

        return false

        

    }

     

     

    //测试代码

    var pushArray:Array<Int> = [1,3,5,7,9,8]

    var popArray:Array<Int> = [3,1,9,8,7,5]

    judgeStackOrder(pushArray, popArray)

  • 相关阅读:
    CentOS6.3升级GCC到GCC4.8.2
    监督式学习 -- 分类决策树(一)
    DICOM医学图像处理:fo-dicom网络传输之 C-Echo and C-Store
    百度地图-----&gt;地图类型、定位模式、实时交通、我的位置、加入覆盖物、覆盖物详情及提示
    &quot;浪潮杯&quot;第六届ACM山东省省赛山科场总结
    标题栏风格设置
    ActionBarActivity设置全屏无标题
    王立平--自己定义TitleBar
    C++ const限定符
    黑马day14 过滤器概述&amp;生命周期&amp;运行过程
  • 原文地址:https://www.cnblogs.com/IOSwang/p/4743232.html
Copyright © 2011-2022 走看看