溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang刷leetcode技巧之如何實現(xiàn)棧的壓入、彈出序列

發(fā)布時間:2021-12-16 09:22:15 來源:億速云 閱讀:150 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下golang刷leetcode技巧之如何實現(xiàn)棧的壓入、彈出序列,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

輸入兩個整數(shù)序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數(shù)字均不相等。例如,序列 {1,2,3,4,5} 是某棧的壓棧序列,序列 {4,5,3,2,1} 是該壓棧序列對應的一個彈出序列,但 {4,3,5,1,2} 就不可能是該壓棧序列的彈出序列。

示例 1:

輸入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]

輸出:true

解釋:我們可以按以下順序執(zhí)行:

push(1), push(2), push(3), push(4), pop() -> 4,

push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:

輸入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]

輸出:false

解釋:1 不能在 2 之前彈出。

提示:

0 <= pushed.length == popped.length <= 1000

0 <= pushed[i], popped[i] < 1000

pushed 是 popped 的排列。

解題思路

1,本題主要考察入棧出棧的理解

2,golang slice可以很容易實現(xiàn)棧

3,每次pushed入棧后popped 進行比較

4,如果棧非空,且poped的當前元素和棧頂元素相等,則出棧,同時右移popped指針

代碼實現(xiàn)

func validateStackSequences(pushed []int, popped []int) bool {    var s stack    j:=0    for i:=0;i<len(pushed);i++{        s.push(pushed[i])         for !s.empty() && s.top()==popped[j]{             s.pop()             j++            //if j<len(popped){            // fmt.Println("inner:",s.data,i,j,popped[j],s.top())            //}         }         //if j<len(popped){         //fmt.Println(s.data,i,j,popped[j])         //}    }    return s.empty() && j==len(popped)}
type stack struct{    data []int}
func (s *stack )push(v int){   s.data=append(s.data,v)}
func (s *stack)pop()int{   v:=s.data[len(s.data)-1]   s.data=s.data[:len(s.data)-1]   return v}
func(s*stack)top()int{    return s.data[len(s.data)-1]}
func (s*stack)empty()bool{    return len(s.data)==0}

看完了這篇文章,相信你對“golang刷leetcode技巧之如何實現(xiàn)棧的壓入、彈出序列”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI