Bird
Raised Fist0
DSA Javascriptprogramming~20 mins

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

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Two Pointer Duplicate Master
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 the sorted array?
DSA Javascript
function removeDuplicates(nums) {
  let i = 0;
  for (let j = 1; j < nums.length; j++) {
    if (nums[j] !== nums[i]) {
      i++;
      nums[i] = nums[j];
    }
  }
  return nums.slice(0, i + 1);
}

const input = [1,1,2,2,3,4,4,5];
console.log(removeDuplicates(input));
A[1, 2, 3, 4]
B[1, 1, 2, 3, 4, 5]
C[1, 2, 2, 3, 4, 5]
D[1, 2, 3, 4, 5]
Attempts:
2 left
💡 Hint
Focus on how the two pointers move and how duplicates are skipped.
❓ Predict Output
intermediate
2:00remaining
Length of Array After Duplicate Removal
What is the length of the array after removing duplicates using the two-pointer method on this sorted array?
DSA Javascript
function removeDuplicates(nums) {
  let i = 0;
  for (let j = 1; j < nums.length; j++) {
    if (nums[j] !== nums[i]) {
      i++;
      nums[i] = nums[j];
    }
  }
  return i + 1;
}

const input = [0,0,1,1,1,2,2,3,3,4];
console.log(removeDuplicates(input));
A4
B6
C5
D7
Attempts:
2 left
💡 Hint
Count how many unique numbers are in the array.
🔧 Debug
advanced
2:00remaining
Identify the Error in Two Pointer Duplicate Removal
What error does this code produce when run?
DSA Javascript
function removeDuplicates(nums) {
  let i = 0;
  for (let j = 1; j <= nums.length; j++) {
    if (nums[j] !== nums[i]) {
      i++;
      nums[i] = nums[j];
    }
  }
  return nums.slice(0, i + 1);
}

const input = [1,1,2];
console.log(removeDuplicates(input));
ATypeError: Cannot read property 'undefined' of undefined
B[1, 2]
C[1, 1, 2]
DSyntaxError
Attempts:
2 left
💡 Hint
Check the loop boundary condition carefully.
❓ Predict Output
advanced
2:00remaining
Final Array State After Duplicate Removal
What is the final state of the array after running this two-pointer duplicate removal code?
DSA Javascript
function removeDuplicates(nums) {
  let i = 0;
  for (let j = 1; j < nums.length; j++) {
    if (nums[j] !== nums[i]) {
      i++;
      nums[i] = nums[j];
    }
  }
  return nums;
}

const input = [2,2,2,3,3,4,5,5];
console.log(removeDuplicates(input));
A[2, 3, 4, 5, 3, 4, 5, 5]
B[2, 3, 4, 5, 5, 5, 5, 5]
C[2, 2, 2, 3, 3, 4, 5, 5]
D[2, 3, 3, 4, 5, 5, 5, 5]
Attempts:
2 left
💡 Hint
Only the first part of the array is overwritten with unique values.
🧠 Conceptual
expert
2:00remaining
Why Two Pointer Method Works for Sorted Arrays
Why does the two-pointer method effectively remove duplicates only when the array is sorted?
ABecause the method sorts the array internally before removing duplicates.
BBecause duplicates are adjacent, so comparing current and previous elements detects duplicates easily.
CBecause it uses a hash map to track duplicates which only works on sorted arrays.
DBecause it removes duplicates by swapping elements randomly.
Attempts:
2 left
💡 Hint
Think about how duplicates appear in sorted arrays.

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

  1. Step 1: Understand the two-pointer technique

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

    It overwrites duplicates by placing unique elements at the front, avoiding extra space.
  3. Final Answer:

    To efficiently overwrite duplicates and keep unique elements at the start -> Option D
  4. 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

  1. Step 1: Identify pointer roles

    Pointer i tracks last unique element index, j scans from next element.
  2. Step 2: Correct initialization

    i starts at 0 (first element), j starts at 1 (second element) to compare.
  3. Final Answer:

    let i = 0, j = 1; -> Option B
  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 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

  1. 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].
  2. Step 2: Update array with unique elements

    After processing, unique elements at start are [1, 2, 3].
  3. Final Answer:

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

  1. Step 1: Analyze pointer update

    i should move forward by incrementing to next unique position, not jump to j.
  2. Step 2: Correct pointer increment

    Use i++ to move i forward, then assign nums[i] = nums[j].
  3. Final Answer:

    Pointer i should be incremented, not assigned j -> Option A
  4. 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

  1. Step 1: Apply two-pointer method on nums

    Traverse array, move unique elements forward: 0,1,2,3,4.
  2. 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].
  3. Final Answer:

    Length: 5, Array start: [0, 1, 2, 3, 4] -> Option C
  4. Quick Check:

    Unique count = 5, array front = [0,1,2,3,4] [OK]
Hint: Count unique elements, array front holds them [OK]
Common Mistakes:
  • Counting duplicates as unique
  • Not updating array in place
  • Miscounting length after removal
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