2.03 ✅ Hai con trỏ (Two Pointers)

  • Cách viết kinh điển của hai con trỏ + cửa sổ trượt (two pointers + sliding window). Con trỏ phải liên tục dịch sang phải cho đến khi không thể dịch tiếp (điều kiện cụ thể tuỳ bài). Khi con trỏ phải chạm biên phải, bắt đầu dịch con trỏ trái để “nhả” biên trái của cửa sổ. Các bài: 3, 76, 209, 424, 438, 567, 713, 763, 845, 881, 904, 978, 992, 1004, 1040, 1052.
left, right := 0, -1 for left < len(s) { if right+1 < len(s) && freq[s[right+1]-'a'] == 0 { freq[s[right+1]-'a']++ right++ } else { freq[s[left]-'a']-- left++ } result = max(result, right-left+1) }
  • Con trỏ nhanh/chậm (fast/slow pointers) có thể dùng để tìm số bị lặp, độ phức tạp thời gian O(n)O(n). Bài 287.
  • Sau khi thay thế ký tự, tìm độ dài lớn nhất của đoạn liên tiếp gồm cùng một ký tự. Bài 424.
  • Bộ bài toán SUM (SUM problems). Các bài: 1, 15, 16, 18, 167, 923, 1074.
STTTiêu đềLời giảiĐộ khóĐộ phức tạp thời gianĐộ phức tạp bộ nhớYêu thíchTỷ lệ AC (Acceptance)
0011Thùng chứa nhiều nước nhất (Container With Most Water)GoMediumO(n)O(1)54.0%
0015Tổng 3 số (3Sum)GoMediumO(n^2)O(n)❤️32.6%
0016Tổng 3 số gần nhất (3Sum Closest)GoMediumO(n^2)O(1)❤️45.8%
0018Tổng 4 số (4Sum)GoMediumO(n^3)O(n^2)❤️35.9%
0019Xóa nút thứ N từ cuối danh sách (Remove Nth Node From End of List)GoMediumO(n)O(1)41.0%
0026Xóa phần tử trùng trong mảng đã sắp xếp (Remove Duplicates from Sorted Array)GoEasyO(n)O(1)51.5%
0027Xóa phần tử (Remove Element)GoEasyO(n)O(1)53.0%
0028Tìm vị trí xuất hiện đầu tiên của chuỗi con (Find the Index of the First Occurrence in a String)GoEasyO(n)O(1)39.0%
0031Hoán vị kế tiếp (Next Permutation)GoMedium37.5%
0042Hứng nước mưa (Trapping Rain Water)GoHardO(n)O(1)❤️59.2%
0061Xoay danh sách liên kết (Rotate List)GoMediumO(n)O(1)36.1%
0075Sắp xếp màu (Sort Colors)GoMediumO(n)O(1)❤️58.5%
0080Xóa phần tử trùng trong mảng đã sắp xếp II (Remove Duplicates from Sorted Array II)GoMediumO(n)O(1)52.3%
0082Xóa phần tử trùng trong danh sách đã sắp xếp II (Remove Duplicates from Sorted List II)GoMedium45.9%
0086Phân hoạch danh sách (Partition List)GoMediumO(n)O(1)❤️52.0%
0088Trộn hai mảng đã sắp xếp (Merge Sorted Array)GoEasyO(n)O(1)❤️46.6%
0125Palindrome hợp lệ (Valid Palindrome)GoEasyO(n)O(1)44.3%
0141Chu trình trong danh sách liên kết (Linked List Cycle)GoEasyO(n)O(1)❤️47.4%
0142Chu trình trong danh sách liên kết II (Linked List Cycle II)GoMediumO(n)O(1)❤️48.7%
0143Sắp xếp lại danh sách (Reorder List)GoMedium52.5%
0148Sắp xếp danh sách (Sort List)GoMedium55.1%
0151Đảo thứ tự các từ trong chuỗi (Reverse Words in a String)GoMedium32.7%
0160Giao nhau của hai danh sách liên kết (Intersection of Two Linked Lists)GoEasy54.3%
0167Hai tổng II - Mảng đầu vào đã sắp xếp (Two Sum II - Input Array Is Sorted)GoMediumO(n)O(1)60.0%
0189Xoay mảng (Rotate Array)GoMedium39.4%
0202Số hạnh phúc (Happy Number)GoEasy54.8%
0234Danh sách liên kết đối xứng (Palindrome Linked List)GoEasyO(n)O(1)50.2%
0283Dồn các số 0 về cuối (Move Zeroes)GoEasyO(n)O(1)61.4%
0287Tìm số bị lặp (Find the Duplicate Number)GoMediumO(n)O(1)❤️59.1%
0344Đảo chuỗi (Reverse String)GoEasyO(n)O(1)76.7%
0345Đảo nguyên âm trong chuỗi (Reverse Vowels of a String)GoEasyO(n)O(1)50.1%
0349Giao của hai mảng (Intersection of Two Arrays)GoEasyO(n)O(n)70.9%
0350Giao của hai mảng II (Intersection of Two Arrays II)GoEasyO(n)O(n)56.0%
0392Có phải là dãy con (Is Subsequence)GoEasy47.6%
0455Phân phát bánh quy (Assign Cookies)GoEasy49.9%
0457Vòng lặp mảng vòng tròn (Circular Array Loop)GoMedium32.6%
0475Máy sưởi (Heaters)GoMedium36.5%
0524Từ dài nhất trong từ điển bằng cách xóa (Longest Word in Dictionary through Deleting)GoMediumO(n)O(1)51.0%
0532Các cặp K-diff trong mảng (K-diff Pairs in an Array)GoMediumO(n)O(n)41.2%
0541Đảo chuỗi II (Reverse String II)GoEasy50.5%
0557Đảo các từ trong chuỗi III (Reverse Words in a String III)GoEasy81.9%
0567Hoán vị trong chuỗi (Permutation in String)GoMediumO(n)O(1)❤️44.3%
0581Mảng con liên tục chưa sắp xếp ngắn nhất (Shortest Unsorted Continuous Subarray)GoMedium36.4%
0611Số tam giác hợp lệ (Valid Triangle Number)GoMedium50.5%
0633Tổng của các số chính phương (Sum of Square Numbers)GoMedium34.4%
0653Hai tổng IV - Đầu vào là BST (Two Sum IV - Input is a BST)GoEasy61.0%
0658Tìm K phần tử gần nhất (Find K Closest Elements)GoMedium46.8%
0696Đếm chuỗi con nhị phân (Count Binary Substrings)GoEasy65.5%
0719Tìm khoảng cách cặp nhỏ nhất thứ K (Find K-th Smallest Pair Distance)GoHard36.7%
0763Phân hoạch nhãn (Partition Labels)GoMediumO(n)O(1)❤️79.7%
0795Số mảng con có giá trị lớn nhất bị chặn (Number of Subarrays with Bounded Maximum)GoMedium52.8%
0821Khoảng cách ngắn nhất tới một ký tự (Shortest Distance to a Character)GoEasy71.3%
0825Bạn bè có độ tuổi phù hợp (Friends Of Appropriate Ages)GoMedium46.3%
0826Phân công công việc có lợi nhuận cao nhất (Most Profit Assigning Work)GoMediumO(n log n)O(n)44.9%
0832Lật ảnh (Flipping an Image)GoEasy80.8%
0838Đẩy quân domino (Push Dominoes)GoMediumO(n)O(n)57.0%
0844So sánh chuỗi với phím backspace (Backspace String Compare)GoEasyO(n)O(n)48.1%
0845Núi dài nhất trong mảng (Longest Mountain in Array)GoMediumO(n)O(1)40.2%
0870Xáo trộn để có lợi thế (Advantage Shuffle)GoMedium51.8%
0876Nút giữa của danh sách liên kết (Middle of the Linked List)GoEasy75.6%
0881Thuyền cứu người (Boats to Save People)GoMediumO(n log n)O(1)53.1%
0922Sắp xếp mảng theo tính chẵn/lẻ II (Sort Array By Parity II)GoEasy70.7%
0923Tổng 3 số với bội số (3Sum With Multiplicity)GoMediumO(n^2)O(n)45.3%
0925Tên bị nhấn giữ (Long Pressed Name)GoEasyO(n)O(1)33.1%
0942Ghép chuỗi DI (DI String Match)GoEasy77.3%
0969Sắp xếp pancake (Pancake Sorting)GoMedium70.1%
0977Bình phương của mảng đã sắp xếp (Squares of a Sorted Array)GoEasyO(n)O(1)71.9%
0986Giao nhau của các danh sách đoạn (Interval List Intersections)GoMediumO(n)O(1)71.3%
1040Di chuyển đá đến khi liên tiếp II (Moving Stones Until Consecutive II)GoMedium55.9%
1048Chuỗi từ dài nhất (Longest String Chain)GoMedium59.2%
1089Nhân đôi số 0 (Duplicate Zeros)GoEasy51.5%
1332Xóa các dãy con đối xứng (Remove Palindromic Subsequences)GoEasy76.2%
1385Tìm giá trị khoảng cách giữa hai mảng (Find the Distance Value Between Two Arrays)GoEasy66.5%
1679Số lượng tối đa các cặp có tổng K (Max Number of K-Sum Pairs)GoMedium57.3%
1721Hoán đổi các nút trong danh sách liên kết (Swapping Nodes in a Linked List)GoMedium67.2%
1877Giảm thiểu tổng cặp lớn nhất trong mảng (Minimize Maximum Pair Sum in Array)GoMedium79.9%
--------------------------------------------------------------------------------------------------------