↓快轉到主要內容
  1. LeetCode/

LeetCode 232: Implement Queue using Stacks

·1 分鐘· ·
LeetCode Easy Stack Design Queue
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-22

  • 提交紀錄:Accepted(一次通過)

解題思路
#

inbox 負責 push,outbox 負責 pop 和 peek(Queue and Design)。outbox 是空的時候,把 inbox 的元素全部 pop 進 outbox,順序就反過來,最早進來的在頂端。每個元素最多搬一次,所以均攤 O(1)。outbox 不是空的時不能倒,不然順序會亂。

我的嘗試
#

一次 AC,但當時直接用 list 的 pop(0) 當 queue,沒有照題目用兩個 stack,而且 pop(0) 是 O(n)。

正確解法
#

class MyQueue:
    def __init__(self):
        self.inbox, self.outbox = [], []

    def push(self, x: int) -> None:
        self.inbox.append(x)

    def _move(self):
        if not self.outbox:
            while self.inbox:
                self.outbox.append(self.inbox.pop())

    def pop(self) -> int:
        self._move()
        return self.outbox.pop()

    def peek(self) -> int:
        self._move()
        return self.outbox[-1]

    def empty(self) -> bool:
        return not self.inbox and not self.outbox

複雜度
#

均攤 O(1),空間 O(n)。

要特別避免的錯誤
#

  • outbox 空的時候才搬。
  • empty 要兩個 stack 都是空的。

面試口說整理
#

我用兩個 stack,push 都放進第一個,pop 和 peek 從第二個拿;第二個空的時候才把第一個全部倒過去,順序剛好反過來變成 FIFO。每個元素最多搬一次,均攤 O(1)。

相關文章

LeetCode 225: Implement Stack using Queues
·1 分鐘
LeetCode Easy Stack Design Queue
LeetCode 225 解題筆記:一個 queue 就夠:push 之後把前面的元素全部轉到後面,新元素就到了隊首
LeetCode 234: Palindrome Linked List
·1 分鐘
LeetCode Easy Linked-List Two-Pointers Stack Recursion
LeetCode 234 解題筆記:快慢指針找中點,反轉後半段,再從兩端往中間比;O(1) 額外空間
LeetCode 145: Binary Tree Postorder Traversal
·1 分鐘
LeetCode Easy Stack Tree Depth-First-Search Binary-Tree
LeetCode 145 解題筆記:迭代的後序遍歷,節點第一次彈出時標記後放回去,再依序推右、左小孩;第二次彈出才記錄
LeetCode 144: Binary Tree Preorder Traversal
·1 分鐘
LeetCode Easy Stack Tree Depth-First-Search Binary-Tree
LeetCode 144 解題筆記:迭代的前序遍歷,彈出就記錄,先推右小孩再推左小孩,左邊才會先處理
LeetCode 94: Binary Tree Inorder Traversal
·1 分鐘
LeetCode Easy Stack Tree Depth-First-Search Binary-Tree
LeetCode 94 解題筆記:迭代的中序遍歷,一路往左把節點推進 stack,彈出時記錄,再轉向右子樹
LeetCode 231: Power of Two
·1 分鐘
LeetCode Easy Math Bit-Manipulation Recursion
LeetCode 231 解題筆記:2 的次方只有一個位元是 1,n & (n - 1) 會把最低的 1 消掉,結果是 0 就是;n 要是正數