📖 Scenario: Imagine you have a list of numbers representing the prices of items in a store. You want to find two items that together cost exactly a certain amount of money. This is a common problem in shopping apps and budgeting tools.
🎯 Goal: You will build a simple program that finds two numbers in a sorted list that add up to a target value. First, you will try the slow way (brute force), then you will use the faster two pointer technique. You will see why the two pointer method is better.
📋 What You'll Learn
Create an array of integers called prices with the exact values: 2, 7, 11, 15
Create an integer variable called target and set it to 9
Write a brute force nested loop to find two numbers in prices that add up to target
Write a two pointer technique to find two numbers in prices that add up to target
Print the pairs found by both methods
💡 Why This Matters
🌍 Real World
Finding pairs of numbers that add up to a target is common in shopping apps, budgeting tools, and data analysis.
💼 Career
Understanding efficient search techniques like two pointers helps in software development roles that require optimization and handling large data sets.
Progress0 / 4 steps
1
Create the data array
Create an integer array called prices with these exact values: 2, 7, 11, 15
DSA C
Hint
Use curly braces to list the numbers inside the array.
2
Set the target sum
Create an integer variable called target and set it to 9
DSA C
Hint
Use simple assignment to set the target value.
3
Write brute force nested loops
Write nested for loops with variables i and j to check every pair in prices and print the pair if their sum equals target
DSA C
Hint
Use two loops to check all pairs. Print when sum matches target.
4
Write two pointer technique and print result
Use two integer variables left and right starting at the beginning and end of prices. Move pointers inward to find and print the pair that sums to target
DSA C
Hint
Use left and right pointers. Move left forward if sum is less than target, else move right backward.
Practice
(1/5)
1. Why does the two pointer technique often perform better than brute force in problems involving arrays or strings?
easy
A. Because it uses extra memory to store intermediate results.
B. Because it uses recursion to explore all possibilities.
C. Because it sorts the array first to make searching faster.
D. Because it reduces the number of nested loops by using two indices moving towards each other or in one direction.
Solution
Step 1: Understand brute force approach
Brute force often uses nested loops to check all pairs or combinations, leading to higher time complexity.
Step 2: Analyze two pointer technique advantage
Two pointers use two indices that move intelligently, avoiding unnecessary checks and reducing complexity.
Final Answer:
Because it reduces the number of nested loops by using two indices moving towards each other or in one direction. -> Option D
Quick Check:
Two pointers reduce nested loops = A [OK]
Hint: Two pointers move smartly to avoid nested loops [OK]
Common Mistakes:
Thinking two pointers always require sorting
Confusing two pointers with recursion
Assuming extra memory is always used
2. Which of the following is the correct syntax to initialize two pointers `left` and `right` for an array `arr` of size `n` in C?
easy
A. int left = 1, right = n;
B. int left = n, right = 0;
C. int left = 0, right = n - 1;
D. int left = n - 1, right = 0;
Solution
Step 1: Identify valid pointer initialization
For two pointers at array ends, left starts at 0 and right at n-1 (last index).
Step 2: Check each option
int left = 0, right = n - 1; correctly sets left=0 and right=n-1. Others have invalid indices out of range.
Final Answer:
int left = 0, right = n - 1; -> Option C
Quick Check:
Array indices start at 0, last index is n-1 = B [OK]
Hint: Start left at 0 and right at n-1 for array ends [OK]
Common Mistakes:
Starting indices at 1 instead of 0
Setting right pointer beyond array size
Swapping left and right initialization
3. What is the output of the following C code snippet using two pointers to find if a sorted array contains two numbers that sum to 9?
int arr[] = {1, 2, 4, 4, 5, 6};
int left = 0, right = 5;
int found = 0;
while (left < right) {
int sum = arr[left] + arr[right];
if (sum == 9) {
found = 1;
break;
} else if (sum < 9) {
left++;
} else {
right--;
}
}
printf("%d\n", found);
medium
A. 1
B. 0
C. 6
D. Compilation error
Solution
Step 1: Trace the two pointer movement
Start left=0 (1), right=5 (6), sum=7 < 9, move left to 1 (2). Then sum=2+6=8 < 9, left=2 (4). Sum=4+6=10 > 9, right=4 (5). Sum=4+5=9 found!
Step 2: Confirm found flag and output
Since sum==9 found, found=1 and loop breaks. printf prints 1.
Final Answer:
1 -> Option A
Quick Check:
Two pointers find sum 9 = 1 [OK]
Hint: Move pointers based on sum compared to target [OK]
Common Mistakes:
Not updating pointers correctly
Confusing sum comparison logic
Assuming array is unsorted
4. The following code attempts to find if any two numbers in a sorted array sum to 10 using two pointers. What is the bug?
int arr[] = {1, 3, 5, 7, 9};
int left = 0, right = 4;
int found = 0;
while (left <= right) {
int sum = arr[left] + arr[right];
if (sum == 10) {
found = 1;
break;
} else if (sum < 10) {
left++;
} else {
right--;
}
}
printf("%d\n", found);
medium
A. The loop condition should be left < right, not left <= right.
B. The sum comparison should be with 9, not 10.
C. The pointers should start at left=1 and right=3.
D. The array must be unsorted for two pointer to work.
Solution
Step 1: Analyze loop condition
Using left <= right allows pointers to be equal, causing sum of same element twice, which is invalid for two distinct elements.
Step 2: Correct loop condition
Changing to left < right ensures pointers do not cross or point to same element, avoiding incorrect sums.
Final Answer:
The loop condition should be left < right, not left <= right. -> Option A
Quick Check:
Loop must stop before pointers meet = C [OK]
Hint: Use left < right to avoid using same element twice [OK]
Common Mistakes:
Allowing pointers to be equal in loop
Changing target sum incorrectly
Starting pointers inside array instead of ends
5. Given a sorted array of integers, how can the two pointer technique be adapted to find all unique pairs that sum to a target value without duplicates? Choose the best approach.
hard
A. Use a hash map to store counts and ignore two pointer technique.
B. Use two pointers and skip duplicate values by moving pointers past equal elements after finding a pair.
C. Sort the array again after each pair is found to remove duplicates.
D. Use nested loops to check all pairs and store pairs in a set to avoid duplicates.
Solution
Step 1: Understand duplicate pairs problem
When array has repeated elements, two pointer may find same pair multiple times.
Step 2: Skip duplicates after finding a pair
After finding a pair, move left pointer forward while next element equals current, and similarly move right pointer backward while next equals current, to avoid duplicates.
Final Answer:
Use two pointers and skip duplicate values by moving pointers past equal elements after finding a pair. -> Option B
Quick Check:
Skip duplicates by advancing pointers after pair found = D [OK]
Hint: Skip duplicates by moving pointers past equal elements [OK]
Common Mistakes:
Re-sorting array repeatedly
Using nested loops instead of two pointers
Ignoring duplicates causing repeated pairs
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.