剑指 Offer 31. 栈的压入、弹出序列【无取巧,易于理解!】
生活随笔
收集整理的這篇文章主要介紹了
剑指 Offer 31. 栈的压入、弹出序列【无取巧,易于理解!】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看題解時,很多大牛用很少的代碼就完成了AC,但可能看了很多遍也看不懂,因此萌生了寫一種最“笨”最完整的代碼的想法,這樣大家可以通過我的代碼入門,看懂了再去挑戰大牛們的簡潔解法。
輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如,序列 {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
解釋:我們可以按以下順序執行:
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 的排列。
classSolution {public boolean validateStackSequences(int[] pushed, int[] popped) {Stack<Integer> s = new Stack<>();int len1 = pushed.length, len2 = popped.length;if(len1 == 0) return true; // 魯棒性int i = 0, j = 0;while(i < len1) {s.push(pushed[i]);while(!s.isEmpty() && s.peek() == popped[j]) {s.pop();j++;}i++;}return (j == len2 ? true : false);} } 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的剑指 Offer 31. 栈的压入、弹出序列【无取巧,易于理解!】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【简洁写法】剑指 Offer 30. 包
- 下一篇: 【简洁写法】剑指 Offer 32 -