小編給大家分享一下golang刷leetcode技巧之如何實現(xiàn)棧的壓入、彈出序列,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
創(chuàng)新互聯(lián)主要業(yè)務有網站營銷策劃、成都網站建設、成都做網站、微信公眾號開發(fā)、成都微信小程序、H5高端網站建設、程序開發(fā)等業(yè)務。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務的過程中,公司還積累了豐富的行業(yè)經驗、營銷型網站建設資源和合作伙伴關系資源,并逐漸建立起規(guī)范的客戶服務和保障體系。
輸入兩個整數(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
s.push(pushed[i])
for !s.empty() && s.top()==popped[j]{
s.pop()
j++
//if j
// fmt.Println("inner:",s.data,i,j,popped[j],s.top())
//}
}
//if j
//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)棧的壓入、彈出序列”有了一定的了解,如果想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!