š Scenario: Imagine you have a list of numbers representing the prices of items on a shelf. You want to find two items that together cost exactly a certain amount of money.Using a slow method, you check every possible pair of items. But there is a faster way called the two pointer technique that helps you find the pair quickly.
šÆ Goal: You will create a program that finds two numbers in a sorted list that add up to a target sum using the two pointer technique. You will see how this method is faster than checking all pairs.
š What You'll Learn
Create a sorted list of integers called prices with exact values
Create an integer variable target with the exact value to find
Use two pointers named left and right to find two numbers that add to target
Print the pair of numbers found or print "No pair found" if none exists
š” Why This Matters
š Real World
Finding pairs of items that meet a condition quickly is useful in shopping apps, budgeting tools, and data analysis.
š¼ Career
Understanding two pointer technique helps in coding interviews and improves problem-solving skills for software development.
Progress0 / 4 steps
1
Create the sorted list of prices
Create a sorted list of integers called prices with these exact values: 2, 4, 7, 11, 15
DSA C++
Hint
Use std::vector<int> to create the list and assign the values exactly.
2
Set the target sum
Create an integer variable called target and set it to 15
DSA C++
Hint
Use a simple integer variable to hold the target sum.
3
Use two pointers to find the pair
Create two integer variables called left and right. Set left to 0 and right to prices.size() - 1. Use a while loop with condition left < right. Inside the loop, calculate sum = prices[left] + prices[right]. If sum == target, break the loop. If sum < target, increase left by 1. Else, decrease right by 1.
DSA C++
Hint
Move the pointers inward depending on whether the sum is less or greater than the target.
4
Print the result
After the loop, if sum == target, print the pair using prices[left] and prices[right] in the format "Pair found: X and Y". Otherwise, print "No pair found".
DSA C++
Hint
Use std::cout to print the pair or the no pair message.
Practice
(1/5)
1. What is the main advantage of the two pointer technique over brute force in array problems?
easy
A. It requires recursion to work properly
B. It uses more memory to store intermediate results
C. It always sorts the array before processing
D. It reduces time complexity by avoiding nested loops
Solution
Step 1: Understand brute force approach
Brute force often uses nested loops, leading to higher time complexity like O(n²).
Step 2: Analyze two pointer technique
Two pointers move through the array in a single pass, reducing time complexity to O(n).
Final Answer:
It reduces time complexity by avoiding nested loops -> Option D
Quick Check:
Two pointer = faster than brute force [OK]
Hint: Two pointers scan array once, avoiding double loops [OK]
Common Mistakes:
Thinking two pointer always sorts array
Assuming two pointer uses more memory
Confusing recursion with two pointer
2. Which of the following is the correct syntax to initialize two pointers at the start and end of a vector v in C++?
easy
A. int left = 1, right = v.size();
B. int left = 0, right = v.size() - 1;
C. int left = v.size(), right = 0;
D. int left = -1, right = v.size() + 1;
Solution
Step 1: Understand vector indexing
Vectors in C++ are zero-indexed, so first element is at 0 and last at size()-1.
Step 2: Check pointer initialization
Setting left = 0 and right = v.size() - 1 correctly points to start and end.
Final Answer:
int left = 0, right = v.size() - 1; -> Option B
Quick Check:
Start=0, End=size()-1 [OK]
Hint: Start pointer at 0, end pointer at size()-1 [OK]
Common Mistakes:
Starting pointers at 1 instead of 0
Using size() as index (out of range)
Negative or invalid pointer initialization
3. What is the output of the following C++ code snippet using two pointers?
std::vector<int> v = {1, 2, 3, 4, 5};
int left = 0, right = 4;
while (left < right) {
std::cout << v[left] + v[right] << " ";
left++;
right--;
}
medium
A. 6 6
B. 5 7 9
C. 1 2 3 4 5
D. 9 7 5
Solution
Step 1: Trace pointer values and sums
Pairs: v[0]+v[4]=1+5=6, v[1]+v[3]=2+4=6, then left=2, right=2 (loop stops since left < right is false).
Step 2: Output sums until pointers meet
Outputs are 6 6.
Final Answer:
6 6 -> Option A
Quick Check:
Sum pairs from ends = 6 6 [OK]
Hint: Sum elements at left and right pointers until they meet [OK]
Common Mistakes:
Including sum when pointers are equal
Confusing pointer increments
Printing elements instead of sums
4. Identify the bug in this two pointer code snippet that tries to find if a pair sums to 10:
std::vector<int> v = {1, 3, 5, 7, 9};
int left = 0, right = v.size() - 1;
while (left < right) {
if (v[left] + v[right] == 10) {
std::cout << "Found";
break;
} else if (v[left] + v[right] > 10) {
left++;
} else {
right--;
}
}
medium
A. Loop condition should be left <= right
B. Vector is not sorted before two pointer use
C. Pointers are moved in wrong directions for sum comparison
D. Output statement is missing a newline
Solution
Step 1: Understand pointer movement logic
If sum > 10, we should move right pointer left to reduce sum, not left pointer right.
Step 2: Identify correct pointer moves
Correct moves: if sum > target, right-- ; if sum < target, left++.
Final Answer:
Pointers are moved in wrong directions for sum comparison -> Option C
Quick Check:
Sum > target -> move right pointer left [OK]
Hint: Move right pointer left if sum too big, left pointer right if too small [OK]
Common Mistakes:
Swapping pointer moves for sum comparisons
Using wrong loop condition
Ignoring vector sorting requirement
5. Given a sorted array arr = {1, 2, 3, 4, 5, 6, 7}, how can the two pointer technique be used to find all pairs that sum to 8 efficiently?
hard
A. Initialize pointers at start and end, move inward adjusting based on sum
B. Use nested loops to check all pairs for sum 8
C. Sort the array first, then use binary search for each element
D. Use recursion to check pairs from both ends
Solution
Step 1: Initialize two pointers
Set left pointer at index 0 and right pointer at last index (6).
Step 2: Move pointers based on sum comparison
If sum of elements at pointers is less than 8, move left pointer right; if more, move right pointer left; if equal, record pair and move both pointers.
Step 3: Continue until pointers cross
Stop when left pointer is no longer less than right pointer.
Final Answer:
Initialize pointers at start and end, move inward adjusting based on sum -> Option A
Quick Check:
Two pointer moves inward checking sums [OK]
Hint: Start ends, move pointers inward based on sum comparison [OK]
Common Mistakes:
Using nested loops instead of two pointers
Not moving pointers correctly after finding a pair
Sorting array unnecessarily when already sorted
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.