Dùng Hash Map khi cần tra cứu / đếm / kiểm tra tồn tại với O(1) trung bình thay vì O(n) của brute force.
Dấu hiệu:
- Đề có "tồn tại không", "đếm số lần", "tìm cặp tổng = X"
- Brute force O(n²) — có thể giảm xuống O(n) nếu nhớ trước những gì đã thấy
- Mảng KHÔNG sorted (sorted thì xét Two-Pointer trước)
Đánh đổi: đổi O(n) space để giảm time.
Code mẫu (Two Sum):
ts
function twoSum(nums: number[], target: number) {
const seen = new Map<number, number>()
for (let i = 0; i < nums.length; i++) {
const need = target - nums[i]
if (seen.has(need)) return [seen.get(need)!, i]
seen.set(nums[i], i)
}
return null
}