📖 Scenario: You have a sorted list of numbers that may contain duplicates. You want to clean it up so that each number appears only once, keeping the order intact.
🎯 Goal: Build a program that removes duplicates from a sorted array using the two-pointer technique and prints the cleaned array.
📋 What You'll Learn
Create an integer array called nums with the exact values: 1, 1, 2, 2, 3, 4, 4, 5
Create an integer variable called length and set it to the size of nums
Use two integer pointers i and j to remove duplicates in-place
Print the array after removing duplicates, showing only unique elements separated by spaces
💡 Why This Matters
🌍 Real World
Removing duplicates from sorted data is common in cleaning up lists like contact numbers, product IDs, or timestamps.
💼 Career
Understanding two-pointer techniques and in-place array modification is useful for coding interviews and efficient data processing.
Progress0 / 4 steps
1
Create the sorted array
Create an integer array called nums with these exact values: 1, 1, 2, 2, 3, 4, 4, 5.
DSA C
Hint
Use int nums[] = { ... }; to create the array with the exact numbers.
2
Set the length of the array
Create an integer variable called length and set it to the number of elements in nums using sizeof(nums) / sizeof(nums[0]).
DSA C
Hint
Use sizeof(nums) / sizeof(nums[0]) to get the number of elements.
3
Remove duplicates using two pointers
Use two integer variables i and j. Initialize i to 0. Use a for loop with j from 1 to length - 1. Inside the loop, if nums[j] is not equal to nums[i], increment i and set nums[i] = nums[j]. After the loop, update length to i + 1.
DSA C
Hint
Use i to track the position of unique elements and j to scan through the array.
4
Print the array after removing duplicates
Use a for loop with variable k from 0 to length - 1. Inside the loop, print nums[k] followed by a space. After the loop, print a newline.
DSA C
Hint
Use printf("%d ", nums[k]); inside the loop and printf("\n"); after the loop.
Practice
(1/5)
1. What is the main purpose of using two pointers in the Remove Duplicates from Sorted Array problem?
easy
A. To efficiently track unique elements and overwrite duplicates in-place
B. To sort the array before removing duplicates
C. To create a new array with unique elements
D. To count the total number of duplicates in the array
Solution
Step 1: Understand the two-pointer approach
One pointer tracks the position to place the next unique element, the other scans the array.
Step 2: Purpose of pointers in-place
This method avoids extra space by overwriting duplicates directly in the original array.
Final Answer:
To efficiently track unique elements and overwrite duplicates in-place -> Option A
Quick Check:
Two pointers help remove duplicates in-place [OK]
Hint: Two pointers track unique and current elements [OK]
Common Mistakes:
Thinking two pointers sort the array
Assuming a new array is created
Confusing counting duplicates with removing them
2. Which of the following is the correct syntax to initialize two pointers i and j for the two-pointer approach in C?
easy
A. int i = 0, j = 1;
B. int i = 1, j = 0;
C. int i = 0; int j = 0;
D. int i, j = 0;
Solution
Step 1: Understand pointer roles
Pointer i starts at 0 (first unique), j starts at 1 (scanning next elements).
Step 2: Correct initialization syntax
Both pointers must be initialized properly; int i = 0, j = 1; is correct in C.
Final Answer:
int i = 0, j = 1; -> Option A
Quick Check:
Initialize i=0 and j=1 for two-pointer [OK]
Hint: Start i at 0 and j at 1 for scanning [OK]
Common Mistakes:
Swapping initial values of i and j
Initializing both pointers to 0
Incorrect declaration syntax
3. What will be the output length after removing duplicates using the two-pointer method on the sorted array [1, 1, 2, 3, 3, 4]?
medium
A. 6
B. 5
C. 3
D. 4
Solution
Step 1: Trace the two-pointer process
Start with i=0, j=1. Compare elements: duplicates skipped, unique elements moved forward.
Step 2: Count unique elements
Unique elements are 1, 2, 3, 4. So length is 4 after removal.
Final Answer:
4 -> Option D
Quick Check:
Unique elements count = 4 [OK]
Hint: Count unique elements after skipping duplicates [OK]
Common Mistakes:
Counting duplicates as unique
Assuming length stays same
Miscounting unique elements
4. Identify the bug in this C code snippet for removing duplicates from a sorted array:
int removeDuplicates(int* nums, int numsSize) {
int i = 0, j = 1;
while (j < numsSize) {
if (nums[i] != nums[j]) {
i++;
nums[i] = nums[j];
}
j++;
}
return i;
}
medium
A. Does not check for array size zero
B. Pointers i and j are initialized incorrectly
C. Returns i instead of i+1 as new length
D. Uses while loop instead of for loop
Solution
Step 1: Analyze return value
Variable i tracks last unique index, so length is i+1, not i.
Step 2: Identify correct return
Returning i misses counting the first element, causing off-by-one error.
Final Answer:
Returns i instead of i+1 as new length -> Option C
Quick Check:
Return length = i+1, not i [OK]
Hint: Return last index + 1 for length [OK]
Common Mistakes:
Off-by-one error in return value
Ignoring empty array edge case
Confusing pointer initialization
5. Given a sorted array nums = [0,0,1,1,1,2,2,3,3,4], what will be the array state after applying the two-pointer method to remove duplicates?
hard
A. [0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
B. [0, 1, 2, 3, 4, _, _, _, _, _]
C. [0, 1, 1, 2, 3, 4, _, _, _, _]
D. [0, 1, 2, 3, 4, 5, _, _, _, _]
Solution
Step 1: Apply two-pointer overwrite
Unique elements 0,1,2,3,4 are moved to front positions in array.
Step 2: Final array state
Positions after unique elements remain unchanged or ignored (represented as underscores).
Final Answer:
[0, 1, 2, 3, 4, _, _, _, _, _] -> Option B
Quick Check:
Array front holds unique elements [OK]
Hint: Unique elements overwrite front, rest ignored [OK]
Common Mistakes:
Assuming duplicates remain in place
Misplacing unique elements
Confusing array length with content
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.