每日 2 題精選
1 題 LeetCode Daily Challenge,加 1 題 Top Interview 150,依官方順序每日推進。
每天早上 08:05 (UTC+8),2 題 LeetCode 題解 + 中英雙語解析 + 逐步走查。
2 hand-picked problems with C / C++ solutions and bilingual walkthroughs, delivered daily.
1 題 LeetCode Daily Challenge,加 1 題 Top Interview 150,依官方順序每日推進。
每題附 C 與 C++ 兩種解法,關鍵行皆含中英雙語註解,原始碼以附件寄出。
名詞解釋先於使用、逐步走查追蹤變數變化,不假設你看得懂術語。
題目、思路、複雜度、陷阱皆為雙語,兩種語言各自以母語語感撰寫,不是逐字直譯。
以下是其中一題 27. Remove Element(Top Interview 150)的內容摘錄。
中文:給定一個整數陣列 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.
最直觀的暴力法是每次碰到等於 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.
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
}
※ 實際信件還包含 C++ 版本、逐步走查表、以及完整的陷阱說明。
輸入你的 email,點擊確認信連結即完成訂閱。可隨時退訂。
送出後會收到一封確認信(24 小時內有效);點擊連結即完成訂閱。
After you submit, we'll email a confirmation link — click it within 24 hours to activate.
已是訂閱者但想取消?前往退訂頁面 / Go to unsubscribe →