Bird
Raised Fist0
DSA C++programming~3 mins

Why Remove Duplicates from Sorted Array Two Pointer in DSA C++?

Choose your learning style10 modes available
The Big Idea

What if you could clean up long sorted lists in just one quick pass without extra memory?

The Scenario

Imagine you have a long list of names sorted alphabetically, but some names appear more than once. You want to write them down on a new list without repeating any name.

Doing this by checking each name against all others manually is tiring and slow.

The Problem

Manually scanning the list and comparing each name to all others takes a lot of time and effort.

It's easy to miss duplicates or accidentally skip some names.

This method is slow especially when the list is very long.

The Solution

The two-pointer method lets you scan the sorted list just once, moving two markers to find and skip duplicates quickly.

This way, you build a new list of unique names efficiently without extra space.

Before vs After
✗ Before
for (int i = 0; i < n; i++) {
  bool isDuplicate = false;
  for (int j = 0; j < i; j++) {
    if (arr[i] == arr[j]) isDuplicate = true;
  }
  if (!isDuplicate) uniqueList.push_back(arr[i]);
}
✓ After
int uniqueIndex = 0;
for (int currentIndex = 1; currentIndex < n; currentIndex++) {
  if (arr[currentIndex] != arr[uniqueIndex]) {
    uniqueIndex++;
    arr[uniqueIndex] = arr[currentIndex];
  }
}
What It Enables

This method makes it easy to remove duplicates from sorted lists quickly and with minimal extra space.

Real Life Example

When cleaning up a sorted contact list on your phone, this method helps remove repeated contacts fast without losing order.

Key Takeaways

Manual duplicate removal is slow and error-prone.

Two-pointer technique scans once and skips duplicates efficiently.

It works best on sorted lists and saves space.

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

  1. Step 1: Understand the two-pointer roles

    One pointer tracks the position to place unique elements, the other scans the array.
  2. Step 2: Overwrite duplicates in-place

    When a new unique element is found, it is placed at the tracked position, replacing duplicates.
  3. Final Answer:

    To track unique elements and overwrite duplicates in-place -> Option A
  4. 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

  1. Step 1: Identify pointer roles

    Pointer i tracks the last unique element index, starting at 0; j scans from 1.
  2. Step 2: Initialize pointers accordingly

    Set i = 0 and j = 1 to start comparing from the second element.
  3. Final Answer:

    int i = 0, j = 1; -> Option A
  4. 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

  1. Step 1: Identify unique elements in order

    Unique elements are 1, 2, 3, 4.
  2. Step 2: Count unique elements

    There are 4 unique elements, so the length after removal is 4.
  3. Final Answer:

    4 -> Option B
  4. 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

  1. Step 1: Understand pointer i meaning

    Pointer i is index of last unique element, so length is i + 1.
  2. Step 2: Check return statement

    Returning i alone gives index, not count; must return i + 1 for length.
  3. Final Answer:

    Return value should be i + 1, not i -> Option D
  4. 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?
hard
A. Array: {0, 1, 1, 2, 3, 4, _, _, _, _}, Length: 4
B. Array: {0, 0, 1, 1, 2, 2, 3, 3, 4, 4}, Length: 6
C. Array: {0, 1, 2, 3, 4, _, _, _, _, _}, Length: 5
D. Array: {0, 1, 2, 3, 4, 5, _, _, _, _}, Length: 6

Solution

  1. Step 1: Identify unique elements in order

    Unique elements are 0, 1, 2, 3, 4.
  2. Step 2: Overwrite duplicates in-place

    Using two pointers, these unique elements overwrite the start of the array.
  3. Step 3: Determine new length

    There are 5 unique elements, so length is 5.
  4. Final Answer:

    Array: {0, 1, 2, 3, 4, _, _, _, _, _}, Length: 5 -> Option C
  5. Quick Check:

    Unique elements = 5, array start updated [OK]
Hint: Unique elements overwrite start, length = count unique [OK]
Common Mistakes:
  • Not overwriting duplicates correctly
  • Miscounting unique elements
  • Assuming array length stays same
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard