Let’s take a closer look at the Two Pointer technique, which is a common algorithm that appears in coding tests. This course will explain the basic concept of the Two Pointer method and solve actual problems using it.
1. What is Two Pointer?
The Two Pointer technique is an algorithmic method that efficiently processes data in data structures like arrays or lists by using two pointers. Generally, it is effective in reducing unnecessary loops and improving time complexity as the size of the problem increases.
- Efficiency: It often reduces the time complexity to O(N).
- Simplicity: The code becomes simpler and more readable.
- Application Scope: It can be used in various situations such as sorted arrays, strings, and subarray problems.
2. Basic Idea of Two Pointer
Two pointers are generally used in two ways:
- Left and Right Pointers: Start from both ends of an array and move towards the center to find elements that satisfy the condition.
- Moving in the Same Direction: Both pointers move in the same direction while examining surrounding elements until a specific condition is met.
3. Actual Problem: Two Sum
Here is an actual problem using the Two Pointer technique.
Problem Description
Given a sorted array numbers
and a target sum target
, write a function that returns the indices of the two numbers such that they add up to the target sum. Assume that each input has exactly one solution, and you cannot use the same element twice.
Input Format
numbers: [2, 7, 11, 15]
target: 9
Output Format
[0, 1]
Example Explanation
In the above example, since 2 + 7 = 9
, the output is the indices 0
and 1
.
4. Problem Solving Process
Let’s solve this problem using the Two Pointer method. Proceed with the following steps:
Step 1: Initialize Pointers
Initialize pointers at the start and end of the array. Name the left pointer as left
and the right pointer as right
.
Step 2: Check Conditions
Use a while loop to repeat until the two pointers cross each other. In each iteration, calculate the sum of the two numbers pointed to by the current pointers and check if this sum equals target
.
Step 3: Compare Sum
- If the sum is less than
target
, move theleft
pointer one step to the right. - If the sum is greater than
target
, move theright
pointer one step to the left. - If the sum is equal to
target
, return the two indices.
Step 4: Code Implementation
function twoSum(numbers, target) {
let left = 0;
let right = numbers.length - 1;
while (left < right) {
const sum = numbers[left] + numbers[right];
if (sum === target) {
return [left, right];
} else if (sum < target) {
left++;
} else {
right--;
}
}
return []; // In case there is no answer
}
Step 5: Code Analysis
The time complexity of this code is O(N), and the space complexity is O(1). That means it can solve the problem without storing the array additionally.
5. Additional Examples and Variations
Now, let’s look at other variation problems. This can be applied to finding all combinations of three numbers that add up to target
from the given array.
Problem Description
Given an integer array numbers
and an integer target
, return the indices of all unique combinations of three numbers that sum up to target
.
Input Format
numbers: [1, 2, 3, 4, 5]
target: 9
Output Format
[[0, 3, 4], [1, 2, 4], [2, 3, 4]]
Solution Approach
To solve this problem, we can add a second pointer to find combinations without duplicates. The modified algorithm is as follows:
function threeSum(numbers, target) {
let result = [];
numbers.sort((a, b) => a - b); // Sort the array
for (let i = 0; i < numbers.length - 2; i++) {
let left = i + 1;
let right = numbers.length - 1;
while (left < right) {
const sum = numbers[i] + numbers[left] + numbers[right];
if (sum === target) {
result.push([i, left, right]);
left++;
right--;
while (left < right && numbers[left] === numbers[left - 1]) left++; // Remove duplicates
while (left < right && numbers[right] === numbers[right + 1]) right--; // Remove duplicates
} else if (sum < target) {
left++;
} else {
right--;
}
}
}
return result;
}
6. Conclusion
The Two Pointer technique is a very useful method for processing arrays or lists. It can significantly improve performance, especially when dealing with sorted data. Through the content covered in this course, I hope you gain an understanding of the basic concepts and applications of Two Pointers, and help you solve real-world problems.
Continue practicing various situations where you can use Two Pointers in search and combination problems, and confidently apply them in actual coding interviews.
Practice Problems
Try the following problems:
- Given an integer array
numbers
and an integertarget
, return the combination of indices where the sum of the two closest numbers is equal totarget
. - A problem that returns the length of a substring consisting of unique characters within a string.
By solving problems like these, you can enhance your understanding of the Two Pointer technique and gain experience in solving various problems.