📖 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.
🎯 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, 3, 3, 4, 5, 5, 6
Create an integer variable called writeIndex and set it to 1
Use a for loop with variable readIndex starting from 1 to the end of nums
Inside the loop, compare nums[readIndex] with nums[writeIndex - 1]
If they are different, assign nums[writeIndex] = nums[readIndex] and increment writeIndex
After the loop, print the elements of nums from index 0 to writeIndex - 1 separated by spaces
💡 Why This Matters
🌍 Real World
Removing duplicates from sorted data is common in data cleaning, preparing lists for reports, or optimizing storage.
💼 Career
Understanding two-pointer techniques helps in coding interviews and writing efficient algorithms for array manipulation.
Progress0 / 4 steps
1
Create the sorted array with duplicates
Create an integer array called nums with these exact values: 1, 1, 2, 3, 3, 4, 5, 5, 6
DSA C#
Hint
Use int[] nums = { ... }; to create the array with the exact numbers.
2
Set up the write index
Create an integer variable called writeIndex and set it to 1
DSA C#
Hint
Use int writeIndex = 1; to start the write pointer at position 1.
3
Use a for loop to remove duplicates
Use a for loop with variable readIndex starting from 1 to the end of nums. Inside the loop, compare nums[readIndex] with nums[writeIndex - 1]. If they are different, assign nums[writeIndex] = nums[readIndex] and increment writeIndex
DSA C#
Hint
Use a for loop from 1 to nums.Length. Compare current and previous unique values. Update and move writeIndex when a new unique number is found.
4
Print the cleaned array
Print the elements of nums from index 0 to writeIndex - 1 separated by spaces
DSA C#
Hint
Use a for loop from 0 to writeIndex - 1 and print each element followed by a space.
Practice
(1/5)
1. What is the main purpose of using two pointers in the Remove Duplicates from Sorted Array problem?
easy
A. To create a new array with unique elements
B. To sort the array before removing duplicates
C. To efficiently track unique elements and overwrite duplicates in-place
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 C
Quick Check:
Two pointers help remove duplicates in-place [OK]
Hint: Two pointers track and overwrite duplicates without extra space [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 C# syntax to initialize the two pointers i and j for the problem?
easy
A. int i = 1; int j = 1;
B. int i = 1, j = 0;
C. int i = 0; int j = 0;
D. int i = 0, j = 1;
Solution
Step 1: Identify pointer roles
Pointer i starts at index 0 to track unique elements, j starts at 1 to scan ahead.
Step 2: Check initialization correctness
Initializing i = 0 and j = 1 matches the logic of comparing current and next elements.
Final Answer:
int i = 0, j = 1; -> Option D
Quick Check:
Start i at 0 and j at 1 [OK]
Hint: Start i at 0 and j at 1 to compare adjacent elements [OK]
Common Mistakes:
Starting both pointers at 0
Swapping i and j initialization
Starting both pointers at 1
3. What will be the output array and new length after running the two-pointer method on the sorted array [1, 1, 2, 3, 3]?
medium
A. [1, 2, 3, 3], length = 4
B. [1, 2, 3], length = 3
C. [1, 1, 2, 3, 3], length = 5
D. [1, 2, 2, 3], length = 4
Solution
Step 1: Trace the two-pointer process
Start with i=0, j=1. Compare elements: skip duplicates, overwrite unique elements at i+1.
Step 2: Final array and length
Unique elements are 1, 2, 3 placed at start. Length is 3.
Final Answer:
[1, 2, 3], length = 3 -> Option B
Quick Check:
Unique elements count = 3 [OK]
Hint: Overwrite duplicates, count unique elements for length [OK]
Common Mistakes:
Not updating length after removal
Leaving duplicates in output
Misplacing unique elements
4. Identify the error in the following C# code snippet for removing duplicates from a sorted array:
int RemoveDuplicates(int[] nums) {
int i = 0, j = 1;
while (j < nums.Length) {
if (nums[i] != nums[j]) {
i++;
nums[i] = nums[j];
}
j++;
}
return i;
}
medium
A. The function should return i + 1 instead of i
B. Pointers i and j should both start at 1
C. The while loop condition should be j <= nums.Length
D. The array should be sorted inside the function
Solution
Step 1: Understand pointer meaning
Pointer i tracks last unique element index, so length is i + 1.
Step 2: Check return value
Returning i alone misses counting the first element, so return i + 1.
Final Answer:
The function should return i + 1 instead of i -> Option A
Quick Check:
Return length as i + 1 [OK]
Hint: Return i + 1 as length, not just i [OK]
Common Mistakes:
Returning i instead of i + 1
Incorrect loop boundary causing out-of-range
Sorting array inside function unnecessarily
5. Given a sorted array nums = [0,0,1,1,1,2,2,3,3,4], what will be the array state and returned length after applying the two-pointer duplicate removal method?
hard
A. [0, 1, 2, 3, 4], length = 5
B. [0, 0, 1, 2, 3, 4], length = 6
C. [0, 1, 1, 2, 3, 4], length = 6
D. [0, 1, 2, 3, 3, 4], length = 6
Solution
Step 1: Apply two-pointer method step-by-step
Start with i=0, j=1. Move j forward, overwrite duplicates by placing unique elements at i+1.
Step 2: Final array and length
Unique elements are 0,1,2,3,4 placed at start. Length is 5.
Final Answer:
[0, 1, 2, 3, 4], length = 5 -> Option A
Quick Check:
Unique count = 5 [OK]
Hint: Overwrite duplicates, count unique elements for final length [OK]
Common Mistakes:
Leaving duplicates in the array
Returning wrong length
Misplacing unique elements during overwrite
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.