Leetcode 946 - Validate Stack Sequences

題目

Problem#

題目給你兩個整數陣列 pushedpopped,問你 pushed 能不能透過 stack 操作後轉成 popped

想法#

用一個 stack 模擬 pushed 如何被 push 和 pop 轉成 popped

pushed 按照由左至右的順序 push 進 stack 中,每次 push 之前,先看 stack 的 top 是否等於 popped 當前的數字 (記得追蹤目前 pushed 和 popped 的 index),如果是就 pop ,直到 top 不等於 popped 當前的數字。

不斷重複迴圈,直到 pushedpopped 都處理完,則 return true 。如果 stack 都 push 完了,但是 popped 還有剩並且 top 不等於 popped 當前的數字,代表 pushed 不可能轉成 popped 則 return false

  • 時間複雜度: $\mathcal{O}(n)$
  • 空間複雜度: $\mathcal{O}(n)$

AC Code#

賞析#

心得#

記得 pop 那邊一定要用 while,因為可能會有連續 top() == popped[j]