Suppose we have a sorted list A. We have to return the length of the array after removing all duplicate entries. We have to perform this in O(1) extra space. So we have to do the operation in-place.
For an example, suppose A = [1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5, 6] Then the output will be 6, as there are six distinct elements.
View Discussion
Improve Article
Save Article
ReadDiscussView Discussion
Improve Article
Save Article
Given a sorted array, the task is to remove the duplicate elements from the array.
Examples:
Input : arr[] = {2, 2, 2, 2, 2}
Output : arr[] = {2}
new size = 1
Input : arr[] = {1, 2, 2, 3, 4, 4, 4, 5, 5}
Output : arr[] = {1, 2, 3, 4, 5}
new size = 5
Method
1: (Using extra space)
- Create an auxiliary array temp[] to store unique elements.
- Traverse input array and one by one copy unique elements of arr[] to temp[]. Also keep track of count of unique elements. Let this count be j.
- Copy j elements from temp[] to arr[] and return j
Implementation:C++
#include <iostream>
using
namespace
std;
int
removeDuplicates(
int
arr[],
int
n)
{
if
(n == 0 || n == 1)
return
n;
int
temp[n];
int
j = 0;
for
(
int
i = 0; i < n - 1; i++)
if
(arr[i] != arr[i + 1])
temp[j++] = arr[i];
temp[j++] = arr[n - 1];
for
(
int
i = 0; i < j; i++)
arr[i] = temp[i];
return
j;
}
int
main()
{
int
arr[] = { 1, 2, 2, 3, 4, 4, 4, 5, 5 };
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
n = removeDuplicates(arr, n);
for
(
int
i = 0; i < n; i++)
cout << arr[i] <<
" "
;
return
0;
}
C
#include <stdio.h>
int
removeDuplicates(
int
arr[],
int
n)
{
if
(n == 0 || n == 1)
return
n;
int
temp[n];
int
j = 0;
for
(
int
i = 0; i < n - 1; i++)
if
(arr[i] != arr[i + 1])
temp[j++] = arr[i];
temp[j++] = arr[n - 1];
for
(
int
i = 0; i < j; i++)
arr[i] = temp[i];
return
j;
}
int
main()
{
int
arr[] = { 1, 2, 2, 3, 4, 4, 4, 5, 5 };
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
n = removeDuplicates(arr, n);
for
(
int
i = 0; i < n; i++)
printf
(
"%d "
, arr[i]);
return
0;
}
Java
class
Main {
static
int
removeDuplicates(
int
arr[],
int
n)
{
if
(n ==
0
|| n ==
1
)
return
n;
int
[] temp =
new
int
[n];
int
j =
0
;
for
(
int
i =
0
; i < n -
1
; i++)
if
(arr[i] != arr[i +
1
])
temp[j++] = arr[i];
temp[j++] = arr[n -
1
];
for
(
int
i =
0
; i < j; i++)
arr[i] = temp[i];
return
j;
}
public
static
void
main(String[] args)
{
int
arr[] = {
1
,
2
,
2
,
3
,
4
,
4
,
4
,
5
,
5
};
int
n = arr.length;
n = removeDuplicates(arr, n);
for
(
int
i =
0
; i < n; i++)
System.out.print(arr[i] +
" "
);
}
}
Python3
def
removeDuplicates(arr, n):
if
n
=
=
0
or
n
=
=
1
:
return
n
temp
=
list
(
range
(n))
j
=
0
;
for
i
in
range
(
0
, n
-
1
):
if
arr[i] !
=
arr[i
+
1
]:
temp[j]
=
arr[i]
j
+
=
1
temp[j]
=
arr[n
-
1
]
j
+
=
1
for
i
in
range
(
0
, j):
arr[i]
=
temp[i]
return
j
arr
=
[
1
,
2
,
2
,
3
,
4
,
4
,
4
,
5
,
5
]
n
=
len
(arr)
n
=
removeDuplicates(arr, n)
for
i
in
range
(n):
print
(
"%d"
%
(arr[i]), end
=
" "
)
C#
using
System;
class
GFG {
static
int
removeDuplicates(
int
[]arr,
int
n)
{
if
(n == 0 || n == 1)
return
n;
int
[]temp =
new
int
[n];
int
j = 0;
for
(
int
i = 0; i < n - 1; i++)
if
(arr[i] != arr[i+1])
temp[j++] = arr[i];
temp[j++] = arr[n-1];
for
(
int
i = 0; i < j; i++)
arr[i] = temp[i];
return
j;
}
public
static
void
Main ()
{
int
[]arr = {1, 2, 2, 3, 4, 4, 4, 5, 5};
int
n = arr.Length;
n = removeDuplicates(arr, n);
for
(
int
i = 0; i < n; i++)
Console.Write(arr[i] +
" "
);
}
}
Javascript
<script>
function
removeDuplicates(arr, n)
{
if
(n==0 || n==1)
return
n;
var
temp =
new
Array(n);
var
j = 0;
for
(
var
i=0; i<n-1; i++)
if
(arr[i] != arr[i+1])
temp[j++] = arr[i];
temp[j++] = arr[n-1];
for
(
var
i=0; i<j; i++)
arr[i] = temp[i];
return
j;
}
var
arr = [1, 2, 2, 3, 4, 4, 4, 5, 5];
var
n = arr.length;
n = removeDuplicates(arr, n);
for
(
var
i=0; i<n; i++)
document.write( arr[i]+
" "
);
</script>
Time Complexity : O(n)
Auxiliary Space : O(n)
Method 2: (Constant extra space)
Just maintain a separate index for same array as maintained for different array in Method 1.
Implementation:
C++
#include<iostream>
using
namespace
std;
int
removeDuplicates(
int
arr[],
int
n)
{
if
(n==0 || n==1)
return
n;
int
j = 0;
for
(
int
i=0; i < n-1; i++)
if
(arr[i] != arr[i+1])
arr[j++] = arr[i];
arr[j++] = arr[n-1];
return
j;
}
int
main()
{
int
arr[] = {1, 2, 2, 3, 4, 4, 4, 5, 5};
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
n = removeDuplicates(arr, n);
for
(
int
i=0; i<n; i++)
cout << arr[i] <<
" "
;
return
0;
}
Java
class
Main
{
static
int
removeDuplicates(
int
arr[],
int
n)
{
if
(n ==
0
|| n ==
1
)
return
n;
int
j =
0
;
for
(
int
i =
0
; i < n-
1
; i++)
if
(arr[i] != arr[i+
1
])
arr[j++] = arr[i];
arr[j++] = arr[n-
1
];
return
j;
}
public
static
void
main (String[] args)
{
int
arr[] = {
1
,
2
,
2
,
3
,
4
,
4
,
4
,
5
,
5
};
int
n = arr.length;
n = removeDuplicates(arr, n);
for
(
int
i=
0
; i<n; i++)
System.out.print(arr[i]+
" "
);
}
}
Python3
# Python3 program to remove
# duplicate elements
# This function returns new
# size of modified array
def removeDuplicates(arr, n):
if n == 0 or n == 1:
return n
# To store index of next
# unique element
j = 0
# Doing same as done
# in Method 1 Just
# maintaining another
# updated index i.e. j
for i in range(0, n-1):
if arr[i] != arr[i+1]:
arr[j] = arr[i]
j += 1
arr[j] = arr[n-1]
j += 1
return j
# Driver code
arr = [1, 2, 2, 3, 4, 4, 4, 5, 5]
n = len(arr)
# removeDuplicates() returns
# new size of array.
n = removeDuplicates(arr, n)
# Print updated array
for i in range(0, n):
print (" %d "%(arr[i]), end = " ")
C#
using
System;
class
GfG {
static
int
removeDuplicates(
int
[]arr,
int
n)
{
if
(n == 0 || n == 1)
return
n;
int
j = 0;
for
(
int
i = 0; i < n - 1; i++)
if
(arr[i] != arr[i + 1])
arr[j++] = arr[i];
arr[j++] = arr[n - 1];
return
j;
}
public
static
void
Main ()
{
int
[]arr = {1, 2, 2, 3, 4, 4,
4, 5, 5};
int
n = arr.Length;
n = removeDuplicates(arr, n);
for
(
int
i = 0; i < n; i++)
Console.Write(arr[i] +
" "
);
}
}
Javascript
<script>
function
removeDuplicates(arr , n) {
if
(n == 0 || n == 1)
return
n;
var
j = 0;
for
(i = 0; i < n - 1; i++)
if
(arr[i] != arr[i + 1])
arr[j++] = arr[i];
arr[j++] = arr[n - 1];
return
j;
}
var
arr = [ 1, 2, 2, 3, 4, 4, 4, 5, 5 ];
var
n = arr.length;
n = removeDuplicates(arr, n);
for
(i = 0; i < n; i++)
document.write(arr[i] +
" "
);
</script>
Time Complexity : O(n)
Auxiliary Space : O(1)
This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to
. See your article appearing on the GeeksforGeeks main page and help other Geeks.
5. Using sort() We can use the sort() method to sort the set that we obtained in approach 2. This will also remove any duplicates, while preserving the order, but is slower than the dict.