iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
佛心分享-刷題不只是刷題

[30天LeetCode挑戰] 每天一點演算法,讓技巧融會貫通系列 第 4

[Day04] Array & List + Stack & Queue 筆記 LeetCode第232題題目筆記

  • 分享至 

  • xImage
  •  

前言

今天要學習的內容雖然很基礎,但卻是許多進階算法的根基。這些資料結構在解題時非常常用,不管是操作數組、處理鏈表,還是實現棧與佇列,理解它們的概念和應用至關重要。
學習影片:
https://www.youtube.com/watch?v=-LmHUlozTqE
https://www.youtube.com/watch?v=0Kiunabmm0w
https://www.youtube.com/watch?v=JSKtJqj2pwc
講的超詳細的👍👍

筆記

  1. Array(數組)
    定義:一個固定大小的連續內存塊,支持隨機存取。
    優點:O(1) 的隨機訪問,適合查詢和遍歷。
    缺點:插入和刪除元素時,可能需要移動多個元素,導致性能下降。
  2. Link List(鏈表)
    定義:由多個節點組成,每個節點包含數據和指向下一個節點的指針。
    優點:插入和刪除操作速度快,O(1)。
    缺點:隨機訪問需要遍歷,O(n)。
  3. Stack(棧)
    定義:後進先出(LIFO)的結構,只能從頂部插入或移除元素。
    應用:常用於實現深度優先搜索、括號匹配等問題。
    進入:Push
    拿出:Pop
  4. Queue(佇列)
    定義:先進先出(FIFO)的結構,元素從尾部插入,從頭部移除。
    應用:廣度優先搜索等場景經常用
    進入:Enqueue
    拿出:Dequeue

arraylinked list 在實作中的區別

在 Python 中使用 stack = [] 這種語法時,實際上是在創建一個 Python 的 list,在 Python 中,list 是一種基於 動態數組(dynamic array) 的資料結構。

Python 的 list 是數組嗎?
是的,Python 中的 list 內部實現是基於 動態數組,因此它可以自動調整大小。
當使用 stack = [],這個 stack 是使用數組實現的,可以利用它來模擬棧(Stack)的行為。
list vs array 的區別:
Array(數組) 在某些語言(例如 C 或 Java)中通常是固定大小的,當需要插入或刪除元素時,可能需要重新分配內存。
Python 的 list 是動態的,可以在尾部、頭部或中間插入和刪除元素,並且可以自動調整大小,因此不需要手動管理內存。

232. Implement Queue using Stacks.py

使用兩個 stack 模擬佇列的先進先出 (FIFO) 行為。

解題思路
in_stack 用於插入元素,out_stack 用於取出元素,當需要 poppeek 時將 in_stack 中元素移至 out_stack

class MyQueue(object):

    def __init__(self):
        self.in_stack = []
        self.out_stack = []

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

    def pop(self) -> int:
        self.move_in_to_out()
        return self.out_stack.pop()

    def peek(self) -> int:
        self.move_in_to_out()
        return self.out_stack[-1]

    def empty(self) -> bool:
        return not self.in_stack and not self.out_stack

    def move_in_to_out(self):
        # 只有當 out_stack 為空時,才將 in_stack 的元素全部移到 out_stack
        if not self.out_stack:
            while self.in_stack:
                self.out_stack.append(self.in_stack.pop())

上一篇
[Day03] 關於DFS/BFS的4道題目筆記(257,994,199,752)
下一篇
[Day05] 線性排序法筆記+LeetCode第1365題題目筆記
系列文
[30天LeetCode挑戰] 每天一點演算法,讓技巧融會貫通30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言