0% completed
Find Non-Duplicate Number Instances (easy)
On This Page
Problem Statement
Try it yourself
Problem Statement
Given an array of sorted numbers, move all non-duplicate number instances at the beginning of the array in-place. The non-duplicate numbers should be sorted and you should not use any extra space so that the solution has constant space complexity i.e., O(1).
Move all the unique number instances at the beginning of the array and after moving return the length of the subarray that has no duplicate in it.
Example 1:
Input: [2, 3, 3, 3, 6, 9, 9]
Output: 4
Explanation: The first four elements after moving element will be [2, 3, 6, 9].
Example 2:
Input: [2, 2, 2, 11]
Output: 2
Explanation: The first two elements after moving elements will be [2, 11].
Constraints:
- 1 <= nums.length <= 3 * 10<sup>4</sup>
-100 <= nums[i] <= 100numsis sorted in non-decreasing order.
Try it yourself
Try solving this question here:
Joseph
· 4 years ago
Problem statement was a little confusing in my opinion, as the solution does not technically remove all duplicates from the array. But at the end, I suppose you could return the subarray of length nextNonDuplicate ?

monir.imamverdi
· a year ago
This page needs to be rewritten, it's so confusing.
We're expecting the first occurrence of each distinct number to be retained in the final output, rather than only keeping numbers that appear exactly once. That means instead of filtering strictly unique elements, we need to retain distinct elements in their first occurrence while shifting them to the front.
Hussain Zaidi
· 3 years ago
The problem says: "The relative order of the elements should be kept the same" But in the solution relative order is kept only for the non-duplicate part of the array. Which isn't what the problem suggests.
Luis Philipe
· 4 years ago
I believe that the "Similar Questions" requirement is quite simple, to return the new array length we just need to iterate the array and count the non "key" values. Apply two pointers on it is unnecessary.
John O'Neill
· 3 years ago
The problem as evaluated by the code runner doesn't actually require removing duplicates — it just requires counting non-duplicates, which isn't really a two pointers problem. To keep myself honest, I actually removed the duplicates, as below.
class Solution: def remove(self, arr): if not arr: return 0 next_non_duplicate = 1 for i, num in enumerate(arr): if arr[next_non_duplicate - 1] != num: arr[next_non_duplicate] = num next_non_duplicate += 1 n = len(arr) for _ in range(next_non_duplicate, n): arr.pop() return len(arr)
Mohamed Elsayed
· 4 years ago
The graphical explanation is showing that nextNoneDuplicate starts from 0 while it actually starts from 1
Casey Dietz
· 3 years ago
I dont understand how the elements are being removed in the solution? I just see two pointers moving through the array checking conditionals but I dont see where they are getting removed. What am I missing?
Brian Dy
· 4 years ago
The Similar Questions solution is missing the part where it returns a new array or subarray without the duplicates. If the current solution is acceptable, then Two Pointers is unnecessary and we could have just incremented the counter for any element != key.
Yvonne
· 4 years ago
There seems to be a typo in the example visual: we start with [2, 3, 3, 3, 6, 9, 9] but end with [2, 3, 6, 6, 9, 9, 9]
Tomer
· 4 years ago
If the input array is empty, then the proposed solution returns 1, which is incorrect.
On This Page
Problem Statement
Try it yourself