# [題目編號] 題目名稱 ## 題目資訊 - **難度**: Easy/Medium/Hard - **標籤**: Array, Hash Table, Two Pointers, Sliding Window, Greedy, DP, Graph, Tree, Math, etc. - **題目連結**: [LeetCode](https://leetcode.com/problems/xxx/) - **練習日期**: YYYY-MM-DD - **目標複雜度**: 時間 O(?), 空間 O(?) ## 題目描述 > 在這裡貼上題目的完整描述(或摘要) ## 先備條件與限制 - 輸入限制:n ∈ [?, ?]、值域 ∈ [?, ?]、是否有重複、是否有負數/零 - 回傳/輸出格式:... - 其他:排序是否允許改變輸入、是否需穩定、是否需就地(in-place) ## 解題思路 ### 初步分析(快速定位問題類型) - 問題類型:如 雙指針 / 滑動視窗 / 排序 + 掃描 / 貪心 / DP / 單調結構 / 前綴和 / 二分 / 位運算 ... - 關鍵觀察:列出 2-4 點(不等式關係、單調性、區間性質、可分解性) - 目標複雜度理由:為什麼 O(n) 或 O(n log n) 足夠/必要? ### 解法比較 1. **解法 A(基準/暴力/直接枚舉)** - 思路:步驟 1-2-3 - 正確性:為什麼不會漏/不會重? - 複雜度:時間 O(?)、空間 O(?) - 優缺點:易寫/慢;好理解/不通過大資料 2. **解法 B(優化:排序/雙指針/結構)** - 思路:步驟 1-2-3(指出與解法 A 最大差異) - 正確性:單調性/貪心選擇/狀態定義 的論證要點 - 複雜度:時間 O(?)、空間 O(?) - 優缺點:通過大資料/實作較複雜;可讀性需注意 3. (可選)**解法 C(進一步優化/其他路線)** - 思路、正確性、複雜度、優缺點 ### 乾跑(Dry Run) 使用一組小範例逐步展示索引/指標/狀態如何變化(建議附上 3-5 步驟)。 ## 實作細節與 API 設計 ### C# 方法簽名 ```csharp public class Solution { // TODO: 根據題意調整簽名 public int Solve(int[] nums) { // ... } } ``` ### Go 方法簽名 ```go // TODO: 根據題意調整簽名 func solve(nums []int) int { // ... } ``` ### 實作要點 / 常見陷阱 - 邊界:空集合、單元素、全相等、極值(INT_MIN/INT_MAX) - 去重:排序後跳重複、集合/哈希去重 - 早停:提早終止條件(例如 window 擴不動就停) - 精度/溢位:除法、乘法、64 位整數 ## 測試案例 ### 範例輸入輸出 ``` Input: ... Output: ... Explanation: ... ``` ### 邊界與特殊情況清單 - [ ] 空陣列/空字串 - [ ] 單一元素 / 全相同 / 全遞增 / 全遞減 - [ ] 含負數 / 含 0 / 大數 - [ ] 有重複值 / 需去重 - [ ] 大資料壓力測試(n 接近上限) ### 對拍/隨機測試(可選) - 與暴力解法對拍 1000 次;隨機生成測資,確保輸出一致 ## 複雜度分析 - 最壞:時間 O(?)、空間 O(?) - 平均:時間 O(?) - 最佳:時間 O(?)(若有) ## 相關題目與 Follow-up - [題目編號] 題目名稱(相同套路) - Follow-up:若輸入動態變化/資料流版本/線上查詢如何處理? ## 學習筆記 - 今天學到: - 卡住點與修正: - 下次優化想法: --- **總結**:這題的核心在於 ______,適合練習 ______ 技巧。