Swift處理堆棧問題——給定兩組序列,其中一個序列表示棧的push 順序,判斷另一個序列有沒有可能是對應的pop 順序

來源:互聯網
上載者:User

標籤:

題目:輸入兩個整數序列。其中一個序列表示棧的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)

 

Swift處理堆棧問題——給定兩組序列,其中一個序列表示棧的push 順序,判斷另一個序列有沒有可能是對應的pop 順序

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.