close
LeetCode 教學與其他產品比較
1. 什麼是 LeetCode?
LeetCode 是一個專注於程式設計與演算法訓練的線上平台,主要用於提升程式設計技能、準備技術面試、以及競程訓練。LeetCode 提供各種難度的問題(簡單、中等、困難),並涵蓋演算法、資料結構、數學、系統設計等多種題型。
2. LeetCode 的主要特色
- 多語言支援:支援 C++、Java、Python、JavaScript 等多種程式語言。
- 豐富題庫:超過 3000 道題目,涵蓋排序、搜尋、動態規劃、圖論等核心演算法。
- 公司題庫:提供 Google、Facebook、Amazon 等大公司面試常見題目。
- 討論區:用戶可分享解法、最佳實踐,並交流不同的思路。
- 競賽與活動:舉辦每週比賽(LeetCode Weekly Contest),幫助使用者提升競程能力。
- LeetCode Premium:付費版提供公司題目篩選、詳細解析與模擬面試功能。
3. LeetCode 題目示範與演算法概念(Python 和 JavaScript 實作)
3.1 HashMap(雜湊表)
概念
HashMap(雜湊表)是一種鍵值對(key-value pair)資料結構,允許快速查找、插入和刪除元素,時間複雜度平均為 O(1)。
Two Sum(#1)
題目描述: 給定一個整數數組 nums
和一個目標數 target
,請你在該數組中找出和為 target
的兩個數,並返回它們的索引。
- 輸入:
nums = [2,7,11,15]
,target = 9
- 輸出:
[0,1]
- 解釋:
nums[0] + nums[1] = 2 + 7 = 9
Python
def twoSum(nums, target):
num_dict = {}
for i, num in enumerate(nums):
complement = target - num
if complement in num_dict:
return [num_dict[complement], i]
num_dict[num] = i
return []
JavaScript
function twoSum(nums, target) {
let numDict = {};
for (let i = 0; i < nums.length; i++) {
let complement = target - nums[i];
if (complement in numDict) {
return [numDict[complement], i];
}
numDict[nums[i]] = i;
}
return [];
}
3.2 Sliding Window(滑動窗口)
概念
滑動窗口(Sliding Window)用於處理子陣列或子字串問題,透過左右指標動態調整窗口範圍,減少不必要的計算,提高效率。
Longest Substring Without Repeating Characters(#3)
題目描述: 給定一個字串 s
,請找出其中不含重複字符的最長子串的長度。
- 輸入:
s = "abcabcbb"
- 輸出:
3
- 解釋:最長的不重複子串為
"abc"
,長度為3
。
Python
def lengthOfLongestSubstring(s):
char_set = set()
left = max_length = 0
for right in range(len(s)):
while s[right] in char_set:
char_set.remove(s[left])
left += 1
char_set.add(s[right])
max_length = max(max_length, right - left + 1)
return max_length
JavaScript
function lengthOfLongestSubstring(s) {
let charSet = new Set();
let left = 0, maxLength = 0;
for (let right = 0; right < s.length; right++) {
while (charSet.has(s[right])) {
charSet.delete(s[left]);
left++;
}
charSet.add(s[right]);
maxLength = Math.max(maxLength, right - left + 1);
}
return maxLength;
}
3.3 Min-Heap(最小堆)
Merge k Sorted Lists(#23)
題目描述: 合併 k
個已排序的鏈結串列,使其仍保持排序。
- 輸入:
lists = [[1,4,5],[1,3,4],[2,6]]
- 輸出:
[1,1,2,3,4,4,5,6]
3.4 Divide and Conquer(分治法)
Merge Sort(合併排序)
題目描述: 實作合併排序(Merge Sort)來對數組進行排序。
- 輸入:
arr = [5,2,3,1]
- 輸出:
[1,2,3,5]
4. 總結
這些範例涵蓋 HashMap、Sliding Window、Min-Heap 和 Divide & Conquer 概念,並提供 Python 和 JavaScript 兩種語言的實作。透過這些範例,學習者可以熟悉如何運用不同的演算法技巧來解決 LeetCode 的問題。
全站熱搜