Problem#
題目給你兩個整數陣列 pushed 和 popped,問你 pushed 能不能透過 stack 操作後轉成 popped
想法#
用一個 stack 模擬 pushed 如何被 push 和 pop 轉成 popped
把 pushed 按照由左至右的順序 push 進 stack 中,每次 push 之前,先看 stack 的 top 是否等於 popped 當前的數字 (記得追蹤目前 pushed 和 popped 的 index),如果是就 pop ,直到 top 不等於 popped 當前的數字。
不斷重複迴圈,直到 pushed 和 popped 都處理完,則 return true 。如果 stack 都 push 完了,但是 popped 還有剩並且 top 不等於 popped 當前的數字,代表 pushed 不可能轉成 popped 則 return false
- 時間複雜度: $\mathcal{O}(n)$
- 空間複雜度: $\mathcal{O}(n)$
AC Code#
賞析#
- 拿
pushed的前段當 stack 用,只要維護兩個 int 就好
心得#
記得 pop 那邊一定要用 while,因為可能會有連續 top() == popped[j]