Yoru Karu Studio

程式設計學習筆記 | 生活心得

LeetCode 解題思路:35. Search Insert Position(搜索插入位置)

題目描述 給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。 請必須使用時間複雜度為 O(log n) 的演算法。 範例 範例 1: 輸入:nums = [1,3,5,6], target = 5 輸出:2 解釋:5 在數組中,索引為 2範例 2: 輸入:nums = [1,3,5,6], target = 2 輸出:1 解釋:2 不在數組中,應該插入到索引 1 的位置範例 3: 輸入:nums = [1,3,5,6], target = 7 輸出:4 解釋:7 不在數組中,應該插入到數組末尾範例 4: 輸入:nums = [1,3,5,6], target = 0 輸出:0 解釋:0 不在數組中,應該插入到數組開頭限制條件 1 <= nums.length <= 10^4 -10^4 <= nums[i] <= 10^4 nums 為無重複元素的升序排列數組 -10^4 <= target <= 10^4 核心概念理解 1. 問題本質 這題本質上是二分查找的變體:

LeetCode 解題思路:28 .Find the Index of the First Occurrence in a String(找出字符串中第一個匹配項的下標)

題目描述 給定兩個字符串 haystack 和 needle,請你在 haystack 字符串中找出 needle 字符串的第一個匹配項的下標(下標從 0 開始)。如果 needle 不是 haystack 的一部分,請返回 -1。 範例 範例 1: 輸入:haystack = "sadbutsad", needle = "sad" 輸出:0 解釋:"sad" 在下標 0 和 6 處出現。 第一個匹配項在下標 0 處,所以返回 0。範例 2: 輸入:haystack = "leetcode", needle = "leeto" 輸出:-1 解釋:"leeto" 沒有在 "leetcode" 中出現,所以返回 -1。限制條件 1 <= haystack.length, needle.length <= 10^4 haystack 和 needle 僅由小寫英文字符組成 核心概念理解 1. 問題本質 這是經典的字符串匹配問題(String Matching Problem): 在主字符串(haystack)中尋找子字符串(needle) 返回第一次出現的位置 如果找不到返回 -1 2. 實際應用場景 這個問題在實際開發中非常常見:

Python List 與 Array 的差異完整解析

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.

LeetCode 解題思路:27. Remove Element(移除元素)

題目描述 給定一個整數陣列 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? 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.

UTF-8 UTF-16 UTF-32

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.
0%