Remove Duplicates from Sorted Array: The Ultimate Two-Pointer Guide (LeetCode, Python)

Date:

Share post:

Imagine This: Sorting Socks with Your Eyes Closed

Picture this: Youโ€™ve just done laundry, and you’re sorting socks. You notice that your sock drawer is already sorted by color. White, white, whiteโ€ฆ blue, blueโ€ฆ red, red.
Now, your task is to remove the duplicates so that there’s only one sock of each color on display.

Sounds simple? Thatโ€™s exactly what weโ€™re going to do with a sorted array!

Whatโ€™s the Problem Statement?

Letโ€™s understand what LeetCode and coding interviews mean by “Remove Duplicates from Sorted Array”

Given:
A sorted list of integers (in non-decreasing order).

Task:
Remove the duplicates in-place. Ensure each unique element appears only once. Return the new length of the modified array.
You must do this without using extra space (i.e., constant space only).

Why Sorted Arrays Help Us Here?

Imagine you’re reading a line of words sorted alphabetically. If one word is the same as the one before, itโ€™s a duplicate, right?

Since the array is already sorted, all duplicates will sit next to each other. This makes it super easy to compare one element with the one before it and decide whether itโ€™s a duplicate.

Real-Life Analogy: Clearing Your Contact List

Think of your phoneโ€™s contact list. You might have multiple entries for “Mom” or “Alex”. If the list is sorted, you can scroll through and remove the extras easily because theyโ€™re all grouped together.

Same goes for our arrayโ€”our job is to scroll through, compare, and keep only the first unique one.

Solution Walkthrough: Step-by-Step

Weโ€™ll solve this using the two-pointer technique, which is like having two fingers walking through the array:

Step-by-Step Logic

  1. One pointer (i) keeps track of the last unique element.
  2. The other pointer (j) explores the rest of the array.
  3. If nums[j] != nums[i], we move i forward and copy nums[j] to nums[i].

Here’s how it looks:

Input: nums = [0,0,1,1,1,2,2,3,3,4]

Algorithm:

  • Start with i = 0
  • For j from 1 to len(nums)-1:
    • If nums[j] != nums[i]:
      • Increment i
      • nums[i] = nums[j]

Output: New length = 5
Modified array = [0,1,2,3,4,…]

Why This Works Efficiently?

  • Time Complexity: O(n) โ€” we go through the array once.
  • Space Complexity: O(1) โ€” no extra array needed.

Variants You Might See

  • What if the array isn’t sorted?
    Youโ€™ll need to sort it first (O(n log n)) and then apply this logic.
  • What if we want to return the new array instead of the length?
    Just slice: nums[:k], where k is the new length.

Pro Tips for Mastery

โœ… Tip 1: Use the two-pointer technique for any in-place array problems. Itโ€™s a go-to trick! ๐Ÿ‘ฃ
โœ… Tip 2: Donโ€™t worry about what comes after the new length. Interviewers donโ€™t care โ€” just modify the first k elements. ๐Ÿš€
โœ… Tip 3: Avoid extra memory unless asked โ€” space-efficient solutions score more points. ๐Ÿ“‰
โœ… Tip 4: Practice this with strings and characters too โ€” same principle applies! ๐Ÿ”ค
โœ… Tip 5: Naming your pointers meaningfully (unique_index, scanner) helps readability. ๐Ÿง 

Common Mistakes to Avoid

๐Ÿšซ Using another array to store uniques โ€“ not allowed in this problem!
๐Ÿšซ Forgetting the array is sorted โ€“ donโ€™t waste time checking all elements.
๐Ÿšซ Not updating the array in-place โ€“ donโ€™t return a new one unless asked.

Why This Shows Up in Interviews?

Interviewers love this question because:

  • It tests array manipulation.
  • It checks your understanding of in-place operations.
  • It reveals if you know space/time trade-offs.

Pro Insight: This problem lays the foundation. It helps solve more complex array problems like “Move Zeroes”, “Merge Sorted Arrays”, and “Remove Element”.

Try it Yourself


Final Thoughts

You just crushed one of the most frequently asked array problems.
Give yourself a high five โ€” or better, run through it again from memory. Youโ€™ll be amazed at how much you remember.

Keep Practicing. Keep Crushing It.
See you in the next post, where we break down โ€” the next logical problem!

FAQs

1. Why is the two-pointer technique ideal for this problem?
Because the array is sorted, duplicates are adjacent. Two pointers let you overwrite duplicates in-placeโ€”saving space and time.

2. Can I use extra memory or another array?
No, the standard LeetCode/interview problem expects you to do this in-place with O(1) extra space. Using another array is not optimal here.

3. What should I return after removing duplicates?
Return the new length (number of unique elements). The first k elements of the array will be the unique values; what comes after k doesnโ€™t matter.

4. Does this work if the input array isnโ€™t sorted?
No, this solution only works for sorted arrays. For unsorted arrays, sort it first or use a set, but that increases complexity and space usage.

5. Why do interviewers love this problem?
It tests if you can manipulate arrays in-place, think about algorithmic efficiency, and apply classic coding patterns under constraints.

Alfred Algo
Alfred Algo
Alfred Algo is a renowned expert in data structures and algorithms, celebrated for his ability to simplify complex concepts. With a background in computer science from a prestigious university, Alfred has spent over a decade teaching and mentoring aspiring programmers. He is the author at the popular blog "The Testing Times," where he shares tips, tutorials, and insights into mastering DSA.

Leave a Reply

Advertisement

Related articles

AI in Testing: Complete Guide for 2025

Introduction The software testing landscape is experiencing a seismic shift. By 2025, 72.3% of testing teams are actively exploring AI-driven...

Top 10 Logic Mistakes SDETs Make & How to Fix Them?

Why Passing Pipelines Still Let Bugs Through? Imagine this: your automation test PR has just been merged. CI pipeline...

How to Build Strong Logic for Automation Testing?

Why Logic is the Secret Sauce in Automation Testing? Imagine this: Your Selenium test runs green, but it misses...

Practical JSON Patterns: API to Assertions in PyTest

Ever found yourself buried in JSON while testing APIs with PyTest? Youโ€™re not alone. In a world where over...