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)

  • 相关阅读:
    近来感受
    GIT相关命令
    CMMI评审总结
    Windows下Git Bash的设置
    PHP学习三--常用运算符和结构语句
    PHP学习二--常量
    MYSQL基础十一--存储引擎
    MYSQL基础十--存储过程
    MYSQL基础九--自定义函数
    MYSQL基础八--子查询和连接
  • 原文地址:https://www.cnblogs.com/IOSwang/p/4743232.html
Copyright © 2011-2022 走看看