Bird
Raised Fist0
DSA Cprogramming~3 mins

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

Choose your learning style10 modes available
The Big Idea

Discover how two simple pointers can save you hours of tedious duplicate removal!

The Scenario

Imagine you have a long list of sorted numbers, but some numbers repeat many times. You want to keep only one copy of each number. Doing this by checking each number again and again by hand is tiring and slow.

The Problem

Manually scanning the list and removing duplicates means you have to compare each number with all others, which takes a lot of time and can easily cause mistakes like missing duplicates or deleting the wrong number.

The Solution

The two-pointer method uses two markers to scan the list just once. One pointer moves forward to find new unique numbers, and the other keeps track of where to place them. This way, duplicates are removed quickly and safely.

Before vs After
✗ Before
for (int i = 0; i < n; i++) {
  for (int j = i + 1; j < n; j++) {
    if (arr[i] == arr[j]) {
      // remove duplicate manually
    }
  }
}
✓ 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 lets you quickly clean up sorted lists by removing duplicates in just one pass, saving time and effort.

Real Life Example

When you have a sorted list of customer IDs and want to send a message to each unique customer only once, this method helps you find all unique IDs fast.

Key Takeaways

Manual duplicate removal is slow and error-prone.

Two-pointer method scans once and removes duplicates efficiently.

It works best on sorted arrays where duplicates are together.

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

  1. Step 1: Understand the two-pointer approach

    One pointer tracks the position to place the next unique element, the other scans the array.
  2. Step 2: Purpose of pointers in-place

    This method avoids extra space by overwriting duplicates directly in the original array.
  3. Final Answer:

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

  1. Step 1: Understand pointer roles

    Pointer i starts at 0 (first unique), j starts at 1 (scanning next elements).
  2. Step 2: Correct initialization syntax

    Both pointers must be initialized properly; int i = 0, j = 1; is correct in C.
  3. Final Answer:

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

  1. Step 1: Trace the two-pointer process

    Start with i=0, j=1. Compare elements: duplicates skipped, unique elements moved forward.
  2. Step 2: Count unique elements

    Unique elements are 1, 2, 3, 4. So length is 4 after removal.
  3. Final Answer:

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

  1. Step 1: Analyze return value

    Variable i tracks last unique index, so length is i+1, not i.
  2. Step 2: Identify correct return

    Returning i misses counting the first element, causing off-by-one error.
  3. Final Answer:

    Returns i instead of i+1 as new length -> Option C
  4. 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

  1. Step 1: Apply two-pointer overwrite

    Unique elements 0,1,2,3,4 are moved to front positions in array.
  2. Step 2: Final array state

    Positions after unique elements remain unchanged or ignored (represented as underscores).
  3. Final Answer:

    [0, 1, 2, 3, 4, _, _, _, _, _] -> Option B
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard