SERIES
Two Pointers
Teach the two-pointer shape — how placing two indices at strategic positions and moving them toward each other (or apart) eliminates the inner loop and collapses O(n²) brute force into O(n).
Trong series nàyBẢN TIN
01
Valid Palindrome: hai con trỏ đọc từ hai đầu vào
Một chuỗi là palindrome nếu nó đọc giống nhau từ trái sang phải và từ phải sang trái sau khi loại bỏ các ký tự không phải chữ-số. Hai con trỏ đặt ở hai đầu và đi vào trong kiểm tra điều này trong O(n) time và O(1) space — không cần tạo bản sao đảo ngược.13 thg 6, 2026 · 11 phút đọc · #00012
02
Two Sum II: tại sao thứ tự đã sắp xếp làm two pointers hoạt động
Input đã được sắp xếp không phải ngẫu nhiên — đó là hợp đồng mà cách tiếp cận two-pointer dựa vào. Khi bạn biết mảng đã được sắp xếp, bạn có thể đặt con trỏ ở hai đầu và di chuyển chúng có mục đích: quá lớn thì thu nhỏ phải; quá nhỏ thì mở rộng trái.13 thg 6, 2026 · 12 phút đọc · #00013
03
3Sum: two pointers bên trong một vòng lặp đã sắp xếp
3Sum đưa Two Sum II lên một cấp: cố định một phần tử, sau đó chạy Two Sum II trên phần còn lại. Sắp xếp trước cho phép bạn bỏ qua các phần tử trùng lặp một cách gọn gàng — đây là phần khó mà hầu hết các cách implement hay sai.13 thg 6, 2026 · 13 phút đọc · #00014
04
Container With Most Water: tại sao luôn di chuyển cạnh ngắn hơn
Lý luận greedy là thứ làm cho two-pointer đúng ở đây — không chỉ là nhanh. Di chuyển cạnh cao hơn chỉ có thể làm mọi thứ tệ hơn; di chuyển cạnh ngắn hơn là cách duy nhất để có thể cải thiện. Lý luận đó chính là toàn bộ solution.13 thg 6, 2026 · 13 phút đọc · #00015
05
Trapping Rain Water: từ O(n) space xuống O(1) với two pointers
Brute force thì rõ ràng. Cách dùng prefix/suffix array thì gọn. Two-pointer solution mới là nơi thú vị — bạn có thể loại bỏ hoàn toàn các mảng phụ bằng cách nhận ra rằng bạn chỉ cần running max từ phía nào ngắn hơn.13 thg 6, 2026 · 16 phút đọc · #00016
Đôi dòng ghi chép về những gì tôi đang xây
Nhận email khi tôi đăng bài mới — các bài kỹ thuật, không spam. Hủy đăng ký bất cứ lúc nào.