Remove Duplicates from Sorted Array Using Two Pointers
📖 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 array called nums with the exact values [1, 1, 2, 2, 3, 4, 4, 5].
Create a variable called writeIndex and set it to 1.
Use a for loop with variable readIndex starting from 1 to iterate over nums.
Inside the loop, compare nums[readIndex] with nums[writeIndex - 1] and if different, assign nums[writeIndex] = nums[readIndex] and increment writeIndex.
Print the cleaned array slice nums.slice(0, writeIndex).
💡 Why This Matters
🌍 Real World
Removing duplicates is common when cleaning data, like user IDs or sorted logs, to avoid repeated entries.
💼 Career
Understanding two-pointer techniques helps in coding interviews and writing efficient code for array problems.
Progress0 / 4 steps
1
Create the sorted array with duplicates
Create an array called nums with these exact values: [1, 1, 2, 2, 3, 4, 4, 5].
DSA Javascript
Hint
Use const nums = [1, 1, 2, 2, 3, 4, 4, 5]; to create the array.
2
Set up the write pointer
Create a variable called writeIndex and set it to 1.
DSA Javascript
Hint
Use let 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 iterate over nums. Inside the loop, compare nums[readIndex] with nums[writeIndex - 1]. If they are different, assign nums[writeIndex] = nums[readIndex] and increment writeIndex by 1.
DSA Javascript
Hint
Use a for loop starting at 1. Inside, check if current number is different from the last unique number. If yes, copy it and move writeIndex.
4
Print the cleaned array
Print the cleaned array slice nums.slice(0, writeIndex) to show the array without duplicates.
DSA Javascript
Hint
Use console.log(nums.slice(0, writeIndex)); to print the cleaned array.
Practice
(1/5)
1. What is the main purpose of using the two-pointer technique in removing duplicates from a sorted array?
easy
A. To reverse the array while removing duplicates
B. To sort the array again after duplicates are removed
C. To count the total number of duplicates in the array
D. To efficiently overwrite duplicates and keep unique elements at the start
Solution
Step 1: Understand the two-pointer technique
One pointer tracks the position to place the next unique element, the other scans the array.
Step 2: Purpose of the technique
It overwrites duplicates by placing unique elements at the front, avoiding extra space.
Final Answer:
To efficiently overwrite duplicates and keep unique elements at the start -> Option D
Quick Check:
Two-pointer = overwrite duplicates [OK]
Hint: Two pointers: one scans, one writes unique values [OK]
Common Mistakes:
Thinking it sorts the array again
Confusing counting duplicates with removing them
Assuming it reverses the array
2. Which of the following is the correct syntax to initialize two pointers for removing duplicates from a sorted array nums in JavaScript?
easy
A. let i = 1, j = 0;
B. let i = 0, j = 1;
C. let i = 0, j = 0;
D. let i = 1, j = 1;
Solution
Step 1: Identify pointer roles
Pointer i tracks last unique element index, j scans from next element.
Step 2: Correct initialization
i starts at 0 (first element), j starts at 1 (second element) to compare.
Final Answer:
let i = 0, j = 1; -> Option B
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 both pointers at 1
3. What will be the output array after removing duplicates using the two-pointer method on nums = [1, 1, 2, 2, 3]?
medium
A. [1, 2, 3]
B. [1, 1, 2, 3]
C. [1, 2, 2, 3]
D. [1, 3, 2]
Solution
Step 1: Traverse and compare elements
Start with i=0, j=1. Compare nums[j] with nums[i]. If different, increment i and copy nums[j].
Step 2: Update array with unique elements
After processing, unique elements at start are [1, 2, 3].
Final Answer:
[1, 2, 3] -> Option A
Quick Check:
Unique sorted elements = [1, 2, 3] [OK]
Hint: Unique elements stay at front in sorted order [OK]
Common Mistakes:
Leaving duplicates in the output
Mixing order of elements
Not updating the array in place
4. Consider this code snippet for removing duplicates from a sorted array nums. What is the bug?
let i = 0;
for (let j = 1; j < nums.length; j++) {
if (nums[j] !== nums[i]) {
i = j;
nums[i] = nums[j];
}
}
return i + 1;
medium
A. Pointer i should be incremented, not assigned j
B. The loop should start from j = 0
C. The comparison should be nums[j] === nums[i]
D. Return statement should be i instead of i + 1
Solution
Step 1: Analyze pointer update
i should move forward by incrementing to next unique position, not jump to j.
Step 2: Correct pointer increment
Use i++ to move i forward, then assign nums[i] = nums[j].
Final Answer:
Pointer i should be incremented, not assigned j -> Option A
Quick Check:
i++ to move pointer forward [OK]
Hint: Increment i to place unique elements, don't assign j to i [OK]
Common Mistakes:
Assigning i = j instead of i++
Starting loop at wrong index
Wrong comparison operator
5. Given a sorted array nums = [0,0,1,1,1,2,2,3,3,4], what will be the length of the array after removing duplicates using the two-pointer method, and what will the first part of the array look like?
hard
A. Length: 4, Array start: [0, 1, 2, 3]
B. Length: 6, Array start: [0, 1, 1, 2, 3, 4]
C. Length: 5, Array start: [0, 1, 2, 3, 4]
D. Length: 5, Array start: [0, 0, 1, 2, 3]
Solution
Step 1: Apply two-pointer method on nums
Traverse array, move unique elements forward: 0,1,2,3,4.
Step 2: Count unique elements and array start
There are 5 unique elements, so length is 5, and array start is [0,1,2,3,4].