LeetCode 191 位 1 的個數:Brian Kernighan 算法
題目 計算無符號整數二進制表示中 1 的個數(漢明重量)。 最優解法:n & (n-1) 消除最低位 1 n & (n-1) 恰好將 n 最低位的 1 變為
LeetCode 驗證回文串:雙指針跳過非字母數字
題目 判斷字符串是否為回文:僅考慮字母數字字符,忽略大小寫。空串視為回文。 思路:雙指針夾逼 左右指針向中間移動: - 跳過非字母數字字符(isalnum)
HDU 3911 Black And White:線段樹區間翻轉與最大連續 1 查詢
題目 0/1 序列,兩種操作: 1. 區間翻轉(0↔1) 2. 查詢區間內連續 1 的最大長度 線段樹節點設計 每節點維護: lsum0/1:從左端點開始的
LeetCode 172 階乘尾部零計數:質因子 5 計數法
題目 給定 n,求 n! 末尾連續 0 的個數。要求對數時間。 數學原理 尾部 0 來自 2 × 5。階乘中質因子 2 的個數遠多於 5,故 0 的個數等於
LeetCode 229 求眾數 II:Boyer-Moore 投票算法擴展
題目 找出所有出現次數超過 ⌊n/3⌋ 的元素。要求 O(n) 時間、O(1) 空間。 思路:廣義 Boyer-Moore 投票 超過 n/3 的元素最多兩個
LeetCode 263 醜數判斷:質因子分解法
題目 判斷正整數是否為醜數:質因子僅包含 2、3、5。1 視為醜數。 思路 反覆除以 2、3、5,直到無法整除。若最終結果為 1,則原數質因子僅含 2/3/5
C++ 核心準則:構造/析構函數中不要調用虛函數
核心規則 在構造函數或析構函數中調用虛函數是未定義行為(或至少不符合預期)。此時對象的動態類型尚未完全建立(構造中)或已經拆解(析構中),虛函數調用將靜態綁定到
C++ #include、.h 與 extern 關係詳解:聲明與定義的邊界
核心概念:聲明 vs 定義 聲明:告知編譯器符號名稱與類型,不分配內存。 定義:聲明 + 分配內存(對象)或 提供函數體(函數)。 規則:聲明可多,定義只能
C++ typename 關鍵字完全指南:從屬類型名稱標識與例外場景
兩大用法 聲明模板參數:template <typename T> 與 template <class T> 完全等價。 標識嵌套從屬
C 語言 ELF 文件格式深度解析:從磁盤到內存的加載過程
ELF 文件整體佈局 ELF 文件由ELF 頭、程序頭表、段、節頭表 組成。程序頭表描述「載入內存所需的段」,節頭表描述「鏈接/調試所需的節」。 ELF 頭
C++ 模板術語辨析:函數模板 vs 模板函數、類模板 vs 模板類
核心區別:重心在後 術語中後面的詞是中心詞,前面的詞作修飾語: 術語中心詞含義 函數模板 (function template)模板用於生成函數的模具(泛型
LeetCode Single Number:異或運算 O(1) 空間解法
題目 數組中只有一個數出現一次,其餘數均出現兩次。找出該數。線性時間、常數空間。 核心性質:異或運算 (XOR) a ^ a = 0(自異或為 0) a ^
LeetCode 141 環形鏈表檢測:快慢指針法
題目 給定鏈表頭節點,判斷鏈表中是否有環。 思路:Floyd 判圈算法(快慢指針) 慢指針每次走 1 步,快指針每次走 2 步。 - 若無環,快指針最終到達
LeetCode 平衡二叉樹判斷:後序遍歷剪枝
題目 判斷二叉樹是否高度平衡:任意節點左右子樹高度差不超過 1。 思路:自底向上遞歸 + 剪枝 遞歸函數返回子樹高度,若發現不平衡可提前返回標記(如 -1),
LeetCode 完全二叉樹節點個數:利用性質 O(log²n) 解法
題目 給定完全二叉樹根節點,求節點總數。完全二叉樹:前 h 層滿,最後一層節點靠左排列。 思路:遞歸 + 高度判斷 計算左子樹高度 leftH(沿左孩子一直
LeetCode 同構字符串:雙向映射判斷
題目 判斷兩字符串 s、t 是否同構:s 中字符可替換得到 t,映射需一對一(雙向單射),順序保持。 例子:egg/add → true,foo/bar → f
LeetCode Single Number II:位運算 O(1) 空間解法
題目 數組中只有一個數出現一次,其餘數均出現三次。找出該數。要求線性時間、常數空間。 思路:逐位統計 + 模 3 int 類型 32 位。統計數組中每個二進制