mirror of
https://github.com/prdlk/leetcode.git
synced 2026-09-17 07:26:27 +00:00
1.7 KiB
1.7 KiB
Two Pointers
Walk two indices instead of trying all pairs — order lets you prune O(n²) → O(n).
Recognition
- Sorted array + pair/target condition → converge from both ends
- Palindrome / symmetric check → ends inward
- In-place partition or dedupe → slow writer + fast reader
- Two sequences compared → one pointer each
Template — converging (LC 167)
function twoSumSorted(nums, target) {
let l = 0;
let r = nums.length - 1;
while (l < r) {
const sum = nums[l] + nums[r];
if (sum === target) return [l + 1, r + 1];
if (sum < target) l++; // need a bigger sum
else r--; // need a smaller sum
}
}
Each step discards every pair using the abandoned index — that's the proof.
Template — fast/slow writer (LC 977 idea)
function sortedSquares(nums) {
const out = new Array(nums.length);
let l = 0;
let r = nums.length - 1;
for (let i = nums.length - 1; i >= 0; i--) {
const a = nums[l] * nums[l];
const b = nums[r] * nums[r];
if (a > b) { out[i] = a; l++; }
else { out[i] = b; r--; }
}
return out;
}
Largest squares live at the edges — fill the output backwards.
Pitfalls
- Moving the wrong pointer breaks the pruning argument
- Duplicates in 3Sum: skip repeats after each fixed element
l < rvsl <= r: do the pointers meet or cross?
Recall
- Container With Most Water: why move the shorter wall?
- 3Sum = sort + fix one + which pattern inside?
- Valid Palindrome: what do you do with non-alphanumerics?
Drill
- 125 Valid Palindrome · 167 Two Sum II
- 15 3Sum · 11 Container With Most Water
- 42 Trapping Rain Water · 392 Is Subsequence
- 977 Squares of a Sorted Array · 80 Remove Duplicates II