Bird
Raised Fist0
DSA C#programming~20 mins

Remove Duplicates from Sorted Array Two Pointer in DSA C# - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Two Pointer Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Two Pointer Duplicate Removal
What is the output array after removing duplicates using the two-pointer method on this sorted array?
DSA C#
int[] nums = {1, 1, 2, 2, 3, 4, 4, 5};
int k = RemoveDuplicates(nums);
Console.WriteLine(string.Join(", ", nums[..k]));

int RemoveDuplicates(int[] nums) {
    if (nums.Length == 0) return 0;
    int i = 0;
    for (int j = 1; j < nums.Length; j++) {
        if (nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }
    return i + 1;
}
A1, 2, 3, 4, 5
B1, 1, 2, 2, 3, 4, 4, 5
C1, 2, 2, 3, 4, 5
D1, 2, 3, 4
Attempts:
2 left
💡 Hint
Focus on how the two pointers move and overwrite duplicates.
🧠 Conceptual
intermediate
1:30remaining
Understanding Two Pointer Roles
In the two-pointer approach to remove duplicates from a sorted array, what is the main role of the pointer 'i'?
AScans through the array to find duplicates
BTracks the position to place the next unique element
CCounts the total number of duplicates found
DPoints to the last duplicate element
Attempts:
2 left
💡 Hint
Think about which pointer moves only when a new unique element is found.
🔧 Debug
advanced
2:00remaining
Identify the Bug in Duplicate Removal Code
What error will this code produce when removing duplicates from a sorted array?
DSA C#
int RemoveDuplicates(int[] nums) {
    int i = 0;
    for (int j = 1; j <= nums.Length; j++) {
        if (nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }
    return i + 1;
}
ANullReferenceException
BInfinite loop
CNo error, returns correct length
DIndexOutOfRangeException
Attempts:
2 left
💡 Hint
Check the loop boundary conditions carefully.
❓ Predict Output
advanced
1:30remaining
Result Length After Removing Duplicates
What is the returned length after removing duplicates from this sorted array using the two-pointer method?
DSA C#
int[] nums = {0,0,1,1,1,2,2,3,3,4};
int length = RemoveDuplicates(nums);
Console.WriteLine(length);

int RemoveDuplicates(int[] nums) {
    if (nums.Length == 0) return 0;
    int i = 0;
    for (int j = 1; j < nums.Length; j++) {
        if (nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }
    return i + 1;
}
A5
B6
C10
D4
Attempts:
2 left
💡 Hint
Count unique numbers in the array.
🚀 Application
expert
3:00remaining
Modify Two Pointer to Allow At Most Two Duplicates
How would you modify the two-pointer approach to allow each element to appear at most twice in the sorted array? Which code snippet correctly implements this?
A
int RemoveDuplicates(int[] nums) {
    int i = 1;
    for (int j = 2; j &lt; nums.Length; j++) {
        if (nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }
    return i + 1;
}
B
int RemoveDuplicates(int[] nums) {
    int i = 0;
    for (int j = 1; j &lt; nums.Length; j++) {
        if (nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }
    return i + 1;
}
C
int RemoveDuplicates(int[] nums) {
    int i = 2;
    for (int j = 2; j &lt; nums.Length; j++) {
        if (nums[j] != nums[i - 2]) {
            i++;
            nums[i] = nums[j];
        }
    }
    return i + 1;
}
D
int RemoveDuplicates(int[] nums) {
    int i = 1;
    for (int j = 2; j &lt; nums.Length; j++) {
        if (nums[j] != nums[i - 1]) {
            i++;
            nums[i] = nums[j];
        }
    }
    return i + 1;
}
Attempts:
2 left
💡 Hint
Allow duplicates only if the current element is different from the element two positions before.

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

  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 C
  4. 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

  1. Step 1: Identify pointer roles

    Pointer i starts at index 0 to track unique elements, j starts at 1 to scan ahead.
  2. Step 2: Check initialization correctness

    Initializing i = 0 and j = 1 matches the logic of comparing current and next elements.
  3. Final Answer:

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

  1. Step 1: Trace the two-pointer process

    Start with i=0, j=1. Compare elements: skip duplicates, overwrite unique elements at i+1.
  2. Step 2: Final array and length

    Unique elements are 1, 2, 3 placed at start. Length is 3.
  3. Final Answer:

    [1, 2, 3], length = 3 -> Option B
  4. 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

  1. Step 1: Understand pointer meaning

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

    Returning i alone misses counting the first element, so return i + 1.
  3. Final Answer:

    The function should return i + 1 instead of i -> Option A
  4. 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

  1. 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.
  2. Step 2: Final array and length

    Unique elements are 0,1,2,3,4 placed at start. Length is 5.
  3. Final Answer:

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

10 questions~5 mineasy hard