Remove Duplicates from Sorted Array

Posted: 22 Jan, 2021
Difficulty: Easy

PROBLEM STATEMENT

Try Problem

You are given a sorted integer array' ARR' of size 'N'. You need to remove the duplicates from the array such that each element appears only once. Return the length of this new array.

Note:
Do not allocate extra space for another array. You need to do this by modifying the given input array in-place with O(1) extra memory. 
Input format:
The first line of input contains an integer ‘T’ denoting the number of test cases.

The first line of each test case contains an integer ‘N’ denoting the number of elements in the array. 

The second line of each test case contains ‘N’ space-separated integers representing the elements of the array. 
Output format:
For each test case, return the length of the modified array.
Note:
You don't need to print anything, it has already been taken care of. Just Implement the given function.
Constraints :
1 <= T <= 5
1 <= N <= 10^5
-10^9 <= ARR[i] <=10^9

Where ‘ARR[i]’ is the value of elements of the array.

Time limit: 1 sec
Approach 1

We know that the array is sorted, and hence all the occurrences of a number will be clustered together. Keeping this in mind, we keep two pointers 'i' and ‘j’, where ‘i’ is the slow pointer and ‘j’ is the fast pointer. 

 

Now, as long as ‘ARR[i]’ == ‘ARR[j]’ -> we keep on incrementing ‘j’ to skip all the duplicates. 

 

Now, when we encounter ‘ARR[i]’ != ‘ARR[j]’ -> the duplicate run ends and hence now, we must copy the value of ‘ARR[j]’ to ‘ARR[i+1]’, ‘i’ is then incremented. 

 

We repeat the same process until j reaches the end of the array. Return the value of ‘i’ at the end.

Try Problem