Set & Map: ứng dụng giải bài
Bảng băm không chỉ là lý thuyết — nó là vũ khí giải bài mạnh nhất của người mới. Ba mẫu dùng set/dict dưới đây xuất hiện trong vô số bài tập, và thường hạ độ phức tạp từ O(n²) xuống O(n).
1. Mẫu 1 — set để kiểm tra tồn tại / loại trùng
"Đã thấy chưa?" là câu hỏi set trả lời tức thì (O(1)). Dùng để phát hiện trùng lặp:
Cách ngây thơ (hai vòng so từng cặp) là O(n²); dùng set chỉ O(n).
2. Mẫu 2 — dict để đếm tần suất
"Mỗi thứ xuất hiện bao nhiêu lần?" → dict đếm, một lần duyệt:
3. Mẫu 3 — dict tra cứu bù (two-sum)
Bài kinh điển: tìm hai phần tử cộng lại bằng target, trả về chỉ số. Mẹo: với mỗi x, hỏi
"đã gặp target - x chưa?" — lưu giá trị → chỉ số trong dict.
So với thử mọi cặp O(n²), two-sum bằng dict chỉ O(n) — đây là một trong những mẫu được hỏi nhiều nhất khi phỏng vấn.
4. Mẫu 4 — dict để nhóm (group by)
Nhóm các phần tử theo một khóa chung (vd nhóm từ theo "dạng đã sắp xếp" để tìm anagram):
5. Bảng tổng kết mẫu
| Câu hỏi của bài | Công cụ | Độ phức tạp |
|---|---|---|
| "Đã gặp chưa / có trùng không?" | set | O(n) |
| "Mỗi thứ bao nhiêu lần?" | dict đếm | O(n) |
| "Tìm cặp/phần bù?" | dict giá trị→chỉ số | O(n) |
| "Nhóm theo đặc điểm chung?" | dict nhóm | O(n) |
Quy tắc vàng: thấy mình duyệt đi duyệt lại để tìm/đếm → thử thay bằng set/dict để hạ O(n²) → O(n). Đây là kỹ năng tăng tốc số 1 cho người mới.
6. Mẫu nhận diện
- "Trùng lặp", "duy nhất", "đã thấy" → set.
- "Đếm", "tần suất", "phổ biến nhất" → dict đếm.
- "Hai phần tử thỏa quan hệ" (tổng, hiệu) → dict tra cứu bù.
- "Gom nhóm theo đặc điểm" → dict nhóm.
7. 🎮 Trò chơi: Chọn công cụ băm
8. Quiz kiểm tra nhanh
9. Hoàn thành — XONG Chương 2.4! 🎉
…☑️ Hết Chương 2.4 (Bảng băm). Tiếp theo: 2.5.1 — Cây & cây nhị phân.