Yoru Karu Studio
程式設計學習筆記 | LeetCode 解題分享程式設計學習筆記 | LeetCode 解題分享
Python List 與 Array 的差異完整解析 前言 在 Python 程式設計中,List 和 Array 是兩個容易混淆的概念。很多初學者會認為它們是相同的東西,但實際上它們有著本質上的差異。本文將深入探討這兩種資料結構的特性、使用場景和效能差異。
快速對照表 特性 List Array 資料類型 可混合不同類型 必須相同類型 匯入需求 Python 內建 需要匯入模組 記憶體效率 較低 較高 運算速度 較慢 較快 功能豐富度 豐富 基本 使用難易度 簡單 稍複雜 什麼是 Python List? 定義與特性 List 是 Python 內建的資料結構,可以儲存任意類型的元素序列。它是 Python 中最常用的資料結構之一。
# List 可以包含不同類型的元素 mixed_list = [1, "hello", 3.14, True, [1, 2, 3], {"key": "value"}] print(f"混合類型 List: {mixed_list}") print(f"類型: {type(mixed_list)}") # List 是可變的(mutable) numbers = [1, 2, 3, 4, 5] numbers[0] = 10 # 修改元素 numbers.
題目描述 給定一個整數陣列 nums 和一個整數 val,請你原地移除所有數值等於 val 的元素。元素的順序可以改變。然後返回 nums 中與 val 不相等的元素數量。
假設 nums 中不等於 val 的元素數量為 k,要通過測試,你需要執行以下操作:
更改陣列 nums,使 nums 的前 k 個元素包含不等於 val 的元素 nums 中剩餘元素及陣列大小都不重要 範例 範例 1:
輸入:nums = [3,2,2,3], val = 3 輸出:2, nums = [2,2,_,_] 解釋:函數應返回 k = 2,nums 的前兩個元素均為 2 不需要考慮陣列中超出新長度後面的元素範例 2:
輸入:nums = [0,1,2,2,3,0,4,2], val = 2 輸出:5, nums = [0,1,4,0,3,_,_,_] 解釋:函數應返回 k = 5,nums 的前五個元素為 0, 1, 4, 0, 3 注意這五個元素可為任意順序限制條件 0 <= nums.
Stack(堆疊)資料結構完整教學 什麼是 Stack? Stack(堆疊)是一種遵循 LIFO(Last In First Out,後進先出) 原則的線性資料結構。想像一疊盤子,你只能從最上面拿取或放置盤子,最後放上去的盤子會第一個被拿走。
視覺化概念 現實生活的例子:疊盤子 ┌─────┐ │ 3 │ ← 最後放入(第一個取出) ├─────┤ │ 2 │ ├─────┤ │ 1 │ ← 最先放入(最後取出) └─────┘ 底部 Stack 資料結構: Top ↓ [30] ← Push/Pop 都在這裡進行 [20] [10] BottomStack 的基本操作 Push:將元素放入堆疊頂端 Pop:從堆疊頂端移除元素並回傳 Peek/Top:查看堆疊頂端元素(不移除) IsEmpty:檢查堆疊是否為空 Size:取得堆疊中的元素數量 為什麼需要 Stack? 實際應用場景 # 1. 函式呼叫堆疊 def a(): print("In function a") b() print("Back in function a") def b(): print("In function b") c() print("Back in function b") def c(): print("In function c") # 呼叫堆疊: main -> a() -> b() -> c() # 返回順序: c() -> b() -> a() -> main # 2.
Unicode 與 UTF 編碼的關係詳解 前言 在程式設計中,我們經常會遇到 Unicode、UTF-8、UTF-16、UTF-32 這些術語。很多人會混淆它們的概念,甚至認為 Unicode 就是 UTF-8。今天,讓我們徹底理解它們之間的關係。
核心概念 Unicode:字符的身份證系統 Unicode 是一個字符集標準(Character Set),它的核心任務是為世界上每個字符分配一個唯一的編號。
# Unicode 定義了字符與編號的對應關係 print(f"'A' 的 Unicode 編號: U+{ord('A'):04X}") # U+0041 print(f"'中' 的 Unicode 編號: U+{ord('中'):04X}") # U+4E2D print(f"'🌍' 的 Unicode 編號: U+{ord('🌍'):04X}") # U+1F30D把 Unicode 想像成一個巨大的表格:
字符 Unicode 編號 十進制值 A U+0041 65 中 U+4E2D 20013 🌍 U+1F30D 127757 UTF:編號的儲存方案 UTF(Unicode Transformation Format)是編碼方案,定義如何將 Unicode 編號轉換成位元組來儲存。
# 同一個 Unicode 字符,不同的儲存方案 char = '中' # Unicode: U+4E2D (20013) utf8_bytes = char.
題目描述 給定一個按照非遞減順序排列的整數陣列 nums,請你原地刪除重複出現的元素,使每個元素只出現一次。元素的相對順序應該保持一致。然後返回 nums 中唯一元素的個數。
假設 nums 的唯一元素個數為 k,為了通過測試,你需要做以下事情:
更改陣列 nums,使 nums 的前 k 個元素包含原來的唯一元素,且順序與原陣列相同 nums 的其餘元素以及 nums 的大小都不重要 什麼是非遞減順序? 在深入解題之前,先理解一個重要概念:
非遞減順序是指陣列中的每個元素都不小於前一個元素。簡單來說,就是「排序好的陣列,但允許有重複值」。
# ✅ 非遞減順序的例子 [1, 2, 3, 4, 5] # 嚴格遞增 [1, 1, 2, 2, 3] # 有重複值(這題的重點!) [5, 5, 5, 5, 5] # 全部相同 [1, 2, 2, 3, 3, 3] # 部分重複 # ❌ 不是非遞減順序 [5, 4, 3, 2, 1] # 遞減 [1, 3, 2, 4] # 有下降視覺化理解 非遞減順序(像爬樓梯,可以有平地): ┌─────┐ ┌─┤ │ ┌─┤ │ │ ─┤ │ │ │ └─┴─┴─────┘ 1 2 2 3 3 關鍵:因為是非遞減順序,相同的元素必定相鄰!範例 範例 1:
Queue(佇列)資料結構完整教學 什麼是 Queue? Queue(佇列)是一種遵循 FIFO(First In First Out,先進先出) 原則的線性資料結構。就像現實生活中的排隊一樣,第一個進入佇列的元素會第一個離開。
視覺化概念 排隊買票的例子: [出口] ← 小明 ← 小華 ← 小美 ← [入口] ↑ ↑ 先到的人 後到的人 (先離開) (後離開) 資料結構表示: Front [10 | 20 | 30 | 40] Rear 出隊 ← ← 入隊Queue 的基本操作 Enqueue(入隊):在佇列尾端加入元素 Dequeue(出隊):從佇列前端移除元素 Front/Peek:查看佇列前端元素(不移除) IsEmpty:檢查佇列是否為空 Size:取得佇列中的元素數量 為什麼需要 Queue? 實際應用場景 # 1. 印表機工作佇列 print_queue = Queue() print_queue.enqueue("文件1.pdf") print_queue.enqueue("報告.docx") print_queue.enqueue("圖片.jpg") # 按照順序列印 # 2. 作業系統的程序排程 process_queue = Queue() process_queue.enqueue("Process A") process_queue.enqueue("Process B") # CPU 按順序處理 # 3.