Đừng học thuộc các ý tưởng thuật toán một cách tách rời. Cách hỏi hữu ích hơn trong phỏng vấn là: tín hiệu nào cho thấy nên dùng nó? Điểm nào trong template dễ viết sai nhất? Nếu interviewer thay đổi điều kiện, bạn nên bắt đầu điều chỉnh từ biến hoặc state nào?
Danh sách bài này được tổ chức theo ý tưởng. Mỗi nhóm đều đưa ra “tín hiệu nhận diện, template thường dùng, bài tiêu biểu, trọng tâm ôn tập”. Số lượng bài được giới hạn trong phạm vi đủ để đại diện cho template; hiểu rõ những bài này trước sẽ hiệu quả hơn việc máy móc giải thêm nhiều bài.
Đừng bắt đầu bằng việc giải hết tất cả bài theo thứ tự. Cách phù hợp hơn cho việc chuẩn bị phỏng vấn là: trước tiên đọc bài viết về template tương ứng, đảm bảo bạn có thể tự viết code cốt lõi, sau đó làm “bài bắt buộc”, cuối cùng dùng “bài nâng cao” để kiểm tra trường hợp biên và các biến thể.
| Mục tiêu | Hành động đề xuất |
|---|
| Nhanh chóng xây dựng template | Trước tiên đọc các bài viết về template phổ biến như binary search, two pointers và sliding window, DFS/BFS |
| Bổ sung search và DP | Tiếp tục đọc backtracking, dynamic programming, tự viết ít nhất 2 bài cơ bản cho mỗi nhóm |
| Bổ sung phần còn thiếu trước phỏng vấn | Dùng greedy, bài toán Top K, union-find để bổ sung các biến thể thường gặp |
| Ôn lại đáp án của bản thân | Với mỗi bài, ghi lại tín hiệu nhận diện dạng bài, ý nghĩa của biến cốt lõi, độ phức tạp và ví dụ trường hợp biên. Nếu không giải thích rõ được, nghĩa là bạn vẫn chưa thực sự nắm vững bài đó |
| Hạng mục | Nội dung |
|---|
| Tín hiệu nhận diện | Array đã sắp xếp, điều kiện đơn điệu, tìm biên, tìm giá trị khả thi nhỏ nhất hoặc giá trị khả thi lớn nhất |
| Template thường dùng | Binary search cơ bản, biên trái, biên phải, binary search trên đáp án |
| Bài bắt buộc | 704. Binary search, 34. Tìm vị trí đầu tiên và cuối cùng của phần tử trong array đã sắp xếp |
| Bài nâng cao | 35. Tìm vị trí chèn, 875. Koko ăn chuối |
| Trọng tâm ôn tập | Điều kiện vòng lặp, cách tính mid, sau khi cập nhật biên có rơi vào vòng lặp vô hạn hay không |
| Hạng mục | Nội dung |
|---|
| Tín hiệu nhận diện | Duyệt tree, duyệt graph, các thành phần liên thông trong matrix, số bước ngắn nhất, duyệt theo level |
| Template thường dùng | DFS đệ quy, DFS mô phỏng bằng stack, BFS bằng queue, BFS theo level |
| Bài bắt buộc | 102. Duyệt tree nhị phân theo level, 200. Số lượng đảo |
| Bài nâng cao | 994. Cam thối, 127. Word ladder |
| Trọng tâm ôn tập | Đánh dấu đã truy cập, kiểm tra vượt biên, thống kê số level của BFS |
| Hạng mục | Nội dung |
|---|
| Tín hiệu nhận diện | Liệt kê mọi phương án, lựa chọn path, combination, permutation, subset, ràng buộc bàn cờ |
| Template thường dùng | path, danh sách lựa chọn, level đệ quy, hoàn tác lựa chọn |
| Bài bắt buộc | 77. Combination, 78. Subset |
| Bài nâng cao | 39. Tổng các combination, 51. N quân hậu |
| Trọng tâm ôn tập | Tham số đệ quy đại diện cho điều gì, điều kiện pruning nên đặt trước vòng lặp hay bên trong vòng lặp |
| Hạng mục | Nội dung |
|---|
| Tín hiệu nhận diện | Tìm giá trị tối ưu, số phương án, có thể đạt tới hay không, subsequence, knapsack, gộp interval |
| Template thường dùng | DP một chiều, DP hai chiều, rolling array, knapsack DP |
| Bài bắt buộc | 70. Leo cầu thang, 322. Đổi tiền |
| Bài nâng cao | 300. Subsequence tăng dần dài nhất, 416. Chia thành các subset có tổng bằng nhau |
| Trọng tâm ôn tập | Ý nghĩa của dp[i], khởi tạo, thứ tự duyệt, có thể nén không gian hay không |
| Hạng mục | Nội dung |
|---|
| Tín hiệu nhận diện | Mỗi bước chọn đối tượng phù hợp nhất hiện tại, thường đi kèm sorting, interval, jump, mua bán |
| Template thường dùng | Chọn sau khi sorting, duy trì biên xa nhất, gộp/phủ interval |
| Bài bắt buộc | 455. Phân phát bánh quy, 55. Jump game |
| Bài nâng cao | 45. Jump game II, 435. Interval không giao nhau |
| Trọng tâm ôn tập | Vì sao chiến lược greedy không sai, phản ví dụ có thể bác bỏ chiến lược hiện tại hay không |
| Hạng mục | Nội dung |
|---|
| Tín hiệu nhận diện | Dependency giữa các khóa học, dependency giữa các task, directed acyclic graph, xác định có thể hoàn thành hay không |
| Template thường dùng | Array indegree + queue, hoặc đánh dấu ba màu bằng DFS |
| Bài bắt buộc | 207. Course schedule |
| Bài nâng cao | 210. Course schedule II, 269. Từ điển sao Hỏa |
| Trọng tâm ôn tập | Khi nào giảm indegree, số lượng kết quả có bằng số node hay không |
Bài viết này chỉ giữ lại các dạng bài kinh điển và danh sách bài đề xuất. Lộ trình luyện nhanh 7 ngày và lộ trình hệ thống 30 ngày được duy trì thống nhất trong tổng quan ôn tập phỏng vấn thuật toán. Nếu sau này điều chỉnh nhịp độ ôn tập, chỉ cần cập nhật trang tổng quan để các bảng lộ trình trong nhiều danh sách bài không bị lệch nhau.
Nếu nội dung hữu ích với bạn, hãy tiện tay tặng JavaGuide một Star miễn phí để ủng hộ: GitHub | Gitee.
JavaGuide đã được duy trì gần bảy năm, tích lũy 6100+ commit, với sự chung tay hoàn thiện của 620+ contributor. Star, phản hồi và PR của bạn đều là động lực để dự án tiếp tục cập nhật.
Nếu bạn đang chuẩn bị phỏng vấn backend / phát triển ứng dụng AI, có thể tham khảo Knowledge Planet của tôi, bao gồm các project thực tế về backend và AI, tối ưu CV, hỏi đáp 1-1 và tài liệu về các trọng điểm thường gặp, đã được duy trì liên tục sáu năm.