- Published on
Static Arrays
- Authors
- Name
- Akshay V Anil
Remove Duplicates from sorted Array
Problem Statement
Given an integer array nums
sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same. Then return the number of unique elements in nums
.
Consider the number of unique elements of nums
to be k
. To get accepted, you need to do the following:
- Change the array
nums
such that the firstk
elements ofnums
contain the unique elements in the order they were present innums
initially. - The remaining elements of
nums
are not important, as well as the size ofnums
. - Return
k
.
Example 1:
Input: nums = [1,1,2]
Output: 2, nums = [1,2,_]
Explanation: Your function should return k = 2
, with the first two elements of nums
being 1
and 2
respectively. It does not matter what you leave beyond the returned k
(hence they are underscores).
Example 2:
Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4,_,_,_,_,_]
Explanation: Your function should return k = 5
, with the first five elements of nums
being 0
, 1
, 2
, 3
, and 4
respectively. It does not matter what you leave beyond the returned k
(hence they are underscores).
Code
import java.util.*;
class Solution {
public int removeDuplicates(int[] nums) {
// Use a Set to store unique elements as Set only allows unique values, That was my first thought on this problem
Set<Integer> set = new HashSet<>();
// Then we add all the elements of array to Set , so that only unique elements remain
for(int num : nums) {
set.add(num);
}
// using a for loop and a post-increment op resize the current nums array with the size of elements in set and copy elements back to array
int i = 0;
for(int n : set) {
nums[i++] = n;
}
// Finally sort using the Arrays.sort() method.
Arrays.sort(nums, 0, set.size());
// to return the number of unique elements we return the size of the set
return set.size();
}
}