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

LeetCode 225: Implement Stack using Queues

·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-21

  • 提交紀錄:Runtime Error → Wrong Answer ×2 → Accepted

解題思路
#

只能用 queue 的操作(從尾巴放、從頭拿)。push(x) 之後,把 x 前面的 n - 1 個元素依序拿出來放回尾巴,x 就跑到隊首(Queue and Design)。這樣 pop 和 top 都是看隊首,O(1);push 是 O(n)。

我的嘗試
#

當時直接用 Python 的 list 當成 stack,沒有照題目用 queue 實作。中間兩次 WA 是 top 回傳了 self.l[0](第一個放進去的),應該是 self.l[-1]。

正確解法
#

class MyStack:
    def __init__(self):
        self.q = deque()

    def push(self, x: int) -> None:
        self.q.append(x)
        for _ in range(len(self.q) - 1):
            self.q.append(self.q.popleft())

    def pop(self) -> int:
        return self.q.popleft()

    def top(self) -> int:
        return self.q[0]

    def empty(self) -> bool:
        return not self.q

複雜度
#

push O(n),其他 O(1);空間 O(n)。

要特別避免的錯誤
#

  • 題目要求只用 queue 的操作,直接用 list 當 stack 雖然能過但不符合題意。
  • stack 的頂端是最後放進去的,不是第一個。

面試口說整理
#

只能用 queue 的操作,所以我在每次 push 之後,把新元素前面的所有元素依序轉到尾巴,新元素就到了隊首,pop 和 top 都直接看隊首。push 是 O(n),其他 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 171: Excel Sheet Column Number
·1 分鐘
LeetCode Easy Math String
LeetCode 171 解題筆記:從左到右 res = res × 26 + 字母的值(A = 1)
LeetCode 202: Happy Number
·1 分鐘
LeetCode Easy Hash-Table Math Two-Pointers Floyds-Cycle-Finding-Algorithm
LeetCode 202 解題筆記:一直取位數平方和,會走到 1 或進入環;用集合記看過的數,或用快慢指針判圈
LeetCode 203: Remove Linked List Elements
·1 分鐘
LeetCode Easy Linked-List Recursion
LeetCode 203 解題筆記:頭節點也可能要刪,用 dummy head 讓每次刪除都變成刪 cur.next;刪完不要前進