Daily newsletter · C & C++

LeetCode 每日精選
題解直送你的信箱

每天早上 08:05 (UTC+8),2 題 LeetCode 題解 + 中英雙語解析 + 逐步走查。
2 hand-picked problems with C / C++ solutions and bilingual walkthroughs, delivered daily.

你會收到什麼 What you get

每日 2 題精選

1 題 LeetCode Daily Challenge,加 1 題 Top Interview 150,依官方順序每日推進。

C + C++ 雙解

每題附 C 與 C++ 兩種解法,關鍵行皆含中英雙語註解,原始碼以附件寄出。

初學者友善

名詞解釋先於使用、逐步走查追蹤變數變化,不假設你看得懂術語。

中英對照

題目、思路、複雜度、陷阱皆為雙語,兩種語言各自以母語語感撰寫,不是逐字直譯。

範例信件 Sample newsletter

以下是其中一題 27. Remove Element(Top Interview 150)的內容摘錄。

FromLeetCode Daily <leetcode@yth.tw>
SubjectLeetCode 2026-04-23 — Daily · TI150 #1
展開範例 / Expand sample

27. Remove Element Easy

題目 / Problem

中文:給定一個整數陣列 nums 和一個整數 val原地移除所有等於 val 的元素,回傳移除後陣列的新長度 k

English: Given an integer array nums and integer val, remove all occurrences of val in nums in-place. Return the number k of retained elements.

名詞解釋 / Glossary

  • 原地修改 / In-place:直接在輸入陣列上做修改,不額外配置空間。 Modify the input array directly without allocating extra storage.
  • 雙指針 / Two pointers:用兩個索引同時掃描陣列,常見組合是「快慢指針」。 Two indices walking through the array together — often a fast/slow pair.

思路

最直觀的暴力法是每次碰到等於 val 的元素就把後面的全部往前搬一格,時間 O(n²)。更好的做法是雙指針:一個慢指針 k 記錄「下一個該寫入保留元素的位置」,一個快指針 i 掃描所有元素。當 nums[i] != val 就寫到 nums[k]k++;遇到 val 就跳過。

A brute-force approach shifts every later element forward whenever a match is found — O(n²). The cleaner solution is a two-pointer pattern: slow pointer k marks the next write slot for a kept element, fast pointer i scans every element. When nums[i] != val, write it to nums[k] and advance k; skip otherwise. One linear pass, in-place.

Solution — C

int removeElement(int* nums, int numsSize, int val) {
    // k = 下一個寫入保留元素的位置 / next write slot for a kept element
    int k = 0;
    // i 掃過每個元素 / i scans every element
    for (int i = 0; i < numsSize; i++) {
        if (nums[i] != val) {        // 非要刪除的值 / value we want to keep
            nums[k++] = nums[i];     // 寫入並推進 k / write and advance k
        }
    }
    return k;                        // 保留元素的個數 / count of kept elements
}

複雜度 / Complexity

  • Time: O(n) — 單趟線性掃描 / single linear pass.
  • Space: O(1) — 只用常數個變數 / constant extra variables.

※ 實際信件還包含 C++ 版本、逐步走查表、以及完整的陷阱說明。

訂閱 Subscribe

輸入你的 email,點擊確認信連結即完成訂閱。可隨時退訂。

送出後會收到一封確認信(24 小時內有效);點擊連結即完成訂閱。
After you submit, we'll email a confirmation link — click it within 24 hours to activate.

已是訂閱者但想取消?前往退訂頁面 / Go to unsubscribe →