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)
Trade-off: đổ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
}Use a Hash Map when you need lookup / counting / existence check in O(1) average instead of O(n).
Signals: "exists or not", "count occurrences", "find pair sum = X". If brute force is O(n²), Hash Map often drops it to O(n).
Trade-off: O(n) space to save time.