📖 Scenario: You have a sorted list of numbers that may contain duplicates. You want to keep only unique numbers in the list, removing any repeated numbers.This is like cleaning a guest list where each name appears only once, so you don't invite the same person twice.
🎯 Goal: Build a program that removes duplicates from a sorted array using the two-pointer technique. The program will modify the array in place and print the array after duplicates are removed.
📋 What You'll Learn
Create a vector called nums with the exact values: {1, 1, 2, 2, 3, 4, 4, 5}
Create an integer variable called n to store the size of nums
Use two integer pointers i and j to remove duplicates in place
Print the modified nums vector elements separated by spaces after duplicates are removed
💡 Why This Matters
🌍 Real World
Removing duplicates from sorted data is common in cleaning lists like contact lists, event logs, or sorted records to avoid repeated entries.
💼 Career
Understanding two-pointer techniques and in-place array modification is useful for coding interviews and optimizing data processing tasks.
Progress0 / 4 steps
1
Create the sorted vector with duplicates
Create a vector called nums with the exact values {1, 1, 2, 2, 3, 4, 4, 5}.
DSA C++
Hint
Use std::vector<int> nums = {1, 1, 2, 2, 3, 4, 4, 5}; to create the vector.
2
Create a variable for the vector size
Create an integer variable called n and set it to the size of the vector nums.
DSA C++
Hint
Use int n = nums.size(); to get the vector size.
3
Use two pointers to remove duplicates in place
Use two integer pointers i and j to remove duplicates from nums in place. Initialize i to 0 and loop j from 1 to n - 1. If nums[j] is not equal to nums[i], increment i and set nums[i] to nums[j]. After the loop, resize nums to i + 1.
DSA C++
Hint
Use a for loop with j starting at 1 and compare nums[j] with nums[i]. Update i and nums[i] when different.
4
Print the modified vector after removing duplicates
Print all elements of the modified vector nums separated by spaces on a single line.
DSA C++
Hint
Use a for loop to print each element followed by a space, then print a newline.
Practice
(1/5)
1. What is the main purpose of the two-pointer technique in removing duplicates from a sorted array?
easy
A. To track unique elements and overwrite duplicates in-place
B. To sort the array again after removing duplicates
C. To create a new array with duplicates removed
D. To count the total number of duplicates only
Solution
Step 1: Understand the two-pointer roles
One pointer tracks the position to place unique elements, the other scans the array.
Step 2: Overwrite duplicates in-place
When a new unique element is found, it is placed at the tracked position, replacing duplicates.
Final Answer:
To track unique elements and overwrite duplicates in-place -> Option A
Quick Check:
Two-pointer technique = overwrite duplicates [OK]
Hint: Two pointers: one scans, one writes unique values [OK]
Common Mistakes:
Thinking it creates a new array instead of modifying in-place
Assuming it sorts the array again
Confusing counting duplicates with removing them
2. Which of the following is the correct syntax to initialize the two pointers for removing duplicates from a sorted array nums in C++?
easy
A. int i = 0, j = 1;
B. int i = 1, j = 0;
C. int i = 0, j = 0;
D. int i = 1, j = 1;
Solution
Step 1: Identify pointer roles
Pointer i tracks the last unique element index, starting at 0; j scans from 1.
Step 2: Initialize pointers accordingly
Set i = 0 and j = 1 to start comparing from the second element.
Final Answer:
int i = 0, j = 1; -> Option A
Quick Check:
i=0, j=1 start positions [OK]
Hint: Start i at 0, j at 1 to compare neighbors [OK]
Common Mistakes:
Starting both pointers at 0
Swapping i and j initialization
Starting j before i
3. What will be the output length after removing duplicates using the two-pointer method on the sorted array nums = {1, 1, 2, 3, 3, 4}?
medium
A. 3
B. 4
C. 5
D. 6
Solution
Step 1: Identify unique elements in order
Unique elements are 1, 2, 3, 4.
Step 2: Count unique elements
There are 4 unique elements, so the length after removal is 4.
Final Answer:
4 -> Option B
Quick Check:
Unique count = 4 [OK]
Hint: Count unique numbers in sorted array [OK]
Common Mistakes:
Counting duplicates as unique
Confusing length with original array size
Off-by-one errors in counting
4. Identify the error in the following C++ code snippet for removing duplicates from a sorted array nums:
int removeDuplicates(vector<int>& nums) {
int i = 0, j = 1;
while (j < nums.size()) {
if (nums[i] != nums[j]) {
i++;
nums[i] = nums[j];
}
j++;
}
return i;
}
medium
A. The loop should use for instead of while
B. Pointers i and j should start at 1 and 0 respectively
C. The condition should be nums[i] == nums[j] instead of !=
D. Return value should be i + 1, not i
Solution
Step 1: Understand pointer i meaning
Pointer i is index of last unique element, so length is i + 1.
Step 2: Check return statement
Returning i alone gives index, not count; must return i + 1 for length.
Final Answer:
Return value should be i + 1, not i -> Option D
Quick Check:
Length = last index + 1 [OK]
Hint: Return i + 1 as length, not i [OK]
Common Mistakes:
Returning i instead of i + 1
Swapping pointer initializations
Using wrong comparison operator
5. Given a sorted array nums = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4}, what will be the state of the array after applying the two-pointer method to remove duplicates, and what is the new length?