LeetCode 137:只出現一次的數字 II(位計數 / 掩碼法)
LeetCode 137:只出現一次的數字 II 數組中只有一個元素出現一次,其餘均出現三次。找出該元素,線性時間、常數空間。 解法一:位計數法 統計每個二進
HDU 4012:牆面油漆(BFS 狀態壓縮 + 矩形塗色)
HDU 4012:牆面油漆 2×n 牆面(n≤8),每格目標顏色(大寫字母)。刷子可一次塗一個矩形區域(同色),新顏色覆蓋舊顏色。求最少塗色步數。 BFS +
LeetCode 260:只出現一次的數字 III(位運算分組)
LeetCode 260:只出現一次的數字 III 數組中恰有兩個元素出現一次,其餘均出現兩次。找出這兩個元素,要求線性時間、常數空間。 位運算分組法 全數
LeetCode 64:最小路徑和(動態規劃)
LeetCode 64:最小路徑和 m×n 網格,每格非負整數。從左上角到右下角,只能向右或向下移動,求路徑上數字和的最小值。 動態規劃 dp[i][j] 表
HDU 3567:Eight II(八數碼問題雙向 BFS 預處理)
HDU 3567:Eight II 經典八數碼(3×3 滑塊拼圖),空格用 X 表示。給定起始狀態 A 和目標狀態 B,求最短操作序列(按字典序最小)。 雙向
HDU 4127:Flood-it!(IDA* + 顏色數啟發式)
HDU 4127:Flood-it! N×N 棋盤(N≤8),每格 6 種顏色之一。從左上角開始,每步選一種顏色將連通區染色,求將全盤染成同色的最少步數。 I
HDU 1560:DNA 序列(IDA* + 最長剩餘長度啟發式)
HDU 1560:DNA 序列 給定 k(≤8)條長度 ≤5 的 DNA 串,求最短超序列長度,使每條串都是其子序列。 IDA* 搜索 狀態:每條串已匹配的
HDU 2196:Computer(樹形 DP 求每節點最遠距離)
HDU 2196:Computer 給定一棵帶權樹(N≤10000),求每個節點到最遠節點的距離(即該節點為根時的樹高)。 兩次 DFS 樹形 DP 第一次
HDU 1813:逃離俄羅斯方塊(BFS 狀態壓縮 + 序列構造)
HDU 1813:逃離俄羅斯方塊 N×N 棋盤(N<9),部分格子不可通行。需找一個最短命令序列(N/E/S/W),使從任意可通行格子出發,按序列移動均能到達邊
C++11 std::array 容器:固定大小、棧分配、邊界檢查
C++11 std::array 容器詳解 std::array 封裝固定大小數組,存儲在棧上,效率同原生數組,但提供 STL 容器接口(迭代器、size()、
Eclipse C++ 開發:Binary not found 錯誤解決方法
Eclipse C++ 開發常見錯誤:Binary not found 配置好 MinGW 後,直接點擊 Run 會報錯 Launch failed. Bina
HDU 2918:Tobo or not Tobo(IDA* + 曼哈頓距離啟發式)
HDU 2918:Tobo or not Tobo 3×3 棋盤,四個旋鈕各可順/逆時針旋轉 90°,影響周圍四格。給定打亂後狀態,求在限定步數內恢復標準狀態的
LeetCode 16:最接近的三數之和(排序 + 雙指針)
LeetCode 16:最接近的三數之和 給定數組 nums 和目標值 target,找出三個數使其和與 target 最接近,返回該和。 排序 + 雙指針
LeetCode 290:單詞規律(雙向映射哈希表)
LeetCode 290:單詞規律 給定模式串 pattern 和字符串 str,判斷 str 是否遵循 pattern 的單詞規律。pattern 中字符與
LeetCode 278:第一個錯誤版本(Java 二分查找)
LeetCode 278:第一個錯誤版本(Java 實現) 同 ID 202062,此處提供 Java 版本代碼與詳細註釋。 Java 代碼 public c
LeetCode 283:移動零(雙指針原地交換)
LeetCode 283:移動零 將數組中所有 0 移至末尾,保持非零元素相對順序。要求原地操作,最小化操作次數。 雙指針法 i 指向下一個非零元素應放置的位
C++ 單向鏈表完整實現(增刪查改、有序插入)
C++ 單向鏈表完整實現 封裝節點類 Node 和鏈表類 LinkList,支持頭插、尾插、有序插入、遍歷、查找、刪除、清空等操作。 核心代碼結構 class
LeetCode 20:有效括號(棧匹配)
LeetCode 20:有效括號 判斷只含 ()[]{} 的字符串是否合法。左括號入棧,右括號匹配棧頂左括號,否則非法。最後棧必須為空。 C++ 實現 cla