Two Pointer
Welcome to the Two Pointer section of JDCodebase! The Two Pointer technique is a powerful strategy to reduce nested loops by using two indices that move through the data structure. It's widely used for solving array and string problems efficiently.
What You’ll Learn
- When and how to apply the two pointer technique
- Solving sorted array problems with opposite-direction pointers
- Detecting pairs/triplets with specific conditions
- Avoiding unnecessary iterations and improving performance
- Handling edge cases in left/right movement logic
Common Two Pointer Patterns
Opposite Ends: Start one pointer from the start and one from the end.
Before: [1, 2, 3, 4, 6]
Code: let left = 0, right = arr.length - 1;
while (left < right) {
let sum = arr[left] + arr[right];
if (sum === target) return [left, right];
sum > target ? right-- : left++;
}
After: [1, 4] (example indices)Same Direction: Both pointers start from the beginning or end and move in one direction.
Before: [1, 1, 2, 2, 3, 3]
Code: let i = 0, j = 1;
while (j < arr.length) {
if (arr[i] !== arr[j]) {
i++;
arr[i] = arr[j];
}
j++;
}
After: Removes duplicates in-placeTry This Example
Check if a sorted array has two numbers that sum to a target.
function hasPairWithSum(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left < right) {
const sum = arr[left] + arr[right];
if (sum === target) return true;
sum < target ? left++ : right--;
}
return false;
}Input: arr = [1, 2, 4, 4], target = 8
Expected Output: true