【LeetCode】946. Validate Stack Sequences

揚-avatar-img
發佈於Leetcode
更新於 發佈於 閱讀時間約 7 分鐘

題目

Given two integer arrays pushed and popped each with distinct values, return true if this could have been the result of a sequence of push and pop operations on an initially empty stack, or false otherwise.

範例

Input: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
Output: true
Explanation: We might do the following sequence:
push(1), push(2), push(3), push(4),
pop() -> 4,
push(5),
pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

思路

依照題意,pushed跟popped是兩個整數陣列,內容值不會重複出現。

給一個stack,做完上面陣列的操作流程後,stack是空的就回傳true,反之則回傳false。

  1. pushed陣列內,持續對stack做push(),直到當前數字是popped內最開頭的值,對stack做pop()。

    此時stack=[1, 2, 3, 4] --> stack=[1, 2, 3],popped已用過4,改以下個數字5最為判斷。
  2. 繼續完成pushed陣列內處理,重複上一點邏輯。

解題

Java

class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Stack<Integer> stack = new Stack<>();
int index = 0;

for (int num: pushed) {
stack.push(num);
while (!stack.isEmpty() && popped[index] == stack.peek()) {
stack.pop();
index++;
}
}
return stack.isEmpty();
}
}

Go

func validateStackSequences(pushed []int, popped []int) bool {
var index int;
stack := make([]int, 0)

for _, num := range pushed {
stack = append(stack, num)
for len(stack) != 0 && stack[len(stack) - 1] == popped[index] {
stack = stack[:len(stack)-1]
index++
}
}

return len(stack) == 0
}

Go_實作Stack

func validateStackSequences(pushed []int, popped []int) bool {
var index int;
stack := NewStack()

for _, num := range pushed {
stack.Push(num)
for !stack.IsEmpty() && stack.Peek() == popped[index] {
stack.Pop()
index++
}
}

return stack.IsEmpty()
}

type Stack struct {
list []int
}

func NewStack() *Stack{
return &Stack{}
}

func (s *Stack) Push(element int) {
s.list = append(s.list, element)
}

func (s *Stack) Pop() {
s.list = s.list[: s.Len() -1]
}

func (s *Stack) IsEmpty() bool{
return s.Len() == 0
}

func (s *Stack) Peek() int {
return s.list[s.Len()-1]
}

func (s *Stack) Len() int {
return len(s.list)
}

反思

Java是我工作上主要使用語言,語法使用相對熟悉,內建提供的資料結構跟API比較能在第一時間提供我解題方向。

用go另外寫一版,一方面是在自學後提升一點語法上的熟練度,一方面是想看看不同語言實作同一件事,呈現出來的結果差異。

在Leetcode上執行結果

    執行時間  記憶體用量
Java   4ms    42.5MB
Go   9ms     3.8MB


另外,go內建slice其實已經可以做到不少功能,額外包裝成Stack看起來只是讓原本的程式碼更接近Java的版本。參閱的網路上其他人寫的Stack,在對應的使用場景保留點優化實作上的彈性,多看看不同的寫法,了解其他實作的差異,不失為一個學習的好方式。

留言
avatar-img
留言分享你的想法!
avatar-img
Err500
12會員
76內容數
遇到的坑、解過的題、新知識的探索、舊時代的遺毒!? 工作後我發現,文件更新往往跟不上新需求的更迭,犯錯的歷史總是不斷重演。因此,我改變了方式,蒐集從程式上、系統上的每一次異常處理過程,好讓再次遇到相同的問題時能快速應變。此專題就是我的錯題本,期待日後不管在工作上或交流上遇到難題,都能輕鬆地應答:有什麼難的,我都踩過。
Err500的其他內容
2024/09/17
◆ 句子(sentence)的定義:小寫字母拼成的單字所組成的字串,每個單字間由單一個空白字元進行分隔。 ◆ uncommon的定義:在單一句子內只出現一次,並且沒有出現在另外一句中。 ◆ 給兩個句子s1跟s2,回傳所有符合uncommon定義的單字,可以為任意順序。
Thumbnail
2024/09/17
◆ 句子(sentence)的定義:小寫字母拼成的單字所組成的字串,每個單字間由單一個空白字元進行分隔。 ◆ uncommon的定義:在單一句子內只出現一次,並且沒有出現在另外一句中。 ◆ 給兩個句子s1跟s2,回傳所有符合uncommon定義的單字,可以為任意順序。
Thumbnail
2022/04/22
題目: 給一個陣列,判斷內容是不是遞增或遞減
Thumbnail
2022/04/22
題目: 給一個陣列,判斷內容是不是遞增或遞減
Thumbnail
2021/10/09
Input: head = [1,2,3,4,5], n = 2 Output: [1,2,3,5]
Thumbnail
2021/10/09
Input: head = [1,2,3,4,5], n = 2 Output: [1,2,3,5]
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
題目會給我們個陣列target,問我們從整數串流中1~n之中,如何透過stack 的 push和pop來模擬生成target指定的形式?
Thumbnail
題目會給我們個陣列target,問我們從整數串流中1~n之中,如何透過stack 的 push和pop來模擬生成target指定的形式?
Thumbnail
題目會給我們一組定義好的Stack 堆疊的介面,要求底層用兩個或一個Queue來實現。 也就是說,要求我們用一個或兩個FIFO的Queues去實作出一個LIFO的Stack
Thumbnail
題目會給我們一組定義好的Stack 堆疊的介面,要求底層用兩個或一個Queue來實現。 也就是說,要求我們用一個或兩個FIFO的Queues去實作出一個LIFO的Stack
Thumbnail
題目會給我們一組定義好的Queue 佇列的介面,要求底層用兩個stack來實現。 也就是說,要求我們用兩個LIFO的stacks去實作出一個FIFO的Queue
Thumbnail
題目會給我們一組定義好的Queue 佇列的介面,要求底層用兩個stack來實現。 也就是說,要求我們用兩個LIFO的stacks去實作出一個FIFO的Queue
Thumbnail
題目會給定一個字串s,裡面都是由() [] {}打散交錯而成。 問我們給定的輸入字串s 是不是合法括弧自串,也就是所有的右括弧都在左括弧後面,而且可以兩兩相消。
Thumbnail
題目會給定一個字串s,裡面都是由() [] {}打散交錯而成。 問我們給定的輸入字串s 是不是合法括弧自串,也就是所有的右括弧都在左括弧後面,而且可以兩兩相消。
Thumbnail
Valid Parentheses : 確認input的括號是否符合成雙成對的規則,符合回傳true,否則回傳false.
Thumbnail
Valid Parentheses : 確認input的括號是否符合成雙成對的規則,符合回傳true,否則回傳false.
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News