# Remove duplicates from sorted array

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
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Method 1: (Using extra space)

1. Create an auxiliary array temp[] to store unique elements.
2. 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.
3. Copy j elements from temp[] to arr[] and return j
 `// Simple C++ program to remove duplicates ` `#include ` `using` `namespace` `std; ` ` `  `// Function to remove duplicate elements ` `// This function returns new size of modified ` `// array. ` `int` `removeDuplicates(``int` `arr[], ``int` `n) ` `{ ` `    ``// Return, if array is empty ` `    ``// or contains a single element ` `    ``if` `(n==0 || n==1) ` `        ``return` `n; ` ` `  `    ``int` `temp[n]; ` ` `  `    ``// Start traversing elements ` `    ``int` `j = 0; ` `    ``for` `(``int` `i=0; i

 `  `  `// simple java program to remove ` `// duplicates ` ` `  `class` `Main ` `{ ` `    ``// Function to remove duplicate elements ` `    ``// This function returns new size of modified ` `    ``// array. ` `    ``static` `int` `removeDuplicates(``int` `arr[], ``int` `n) ` `    ``{ ` `        ``// Return, if array is empty ` `        ``// or contains a single element ` `        ``if` `(n==``0` `|| n==``1``) ` `            ``return` `n; ` `      `  `        ``int``[] temp = ``new` `int``[n]; ` `         `  `        ``// Start traversing elements ` `        ``int` `j = ``0``; ` `        ``for` `(``int` `i=``0``; i

 `# Python3 program to ` `# remove duplicates ` `# Function to remove ` `# duplicate elements ` ` `  `# This function returns ` `# new size of modified ` `# array. ` `def` `removeDuplicates(arr, n): ` ` `  `    ``# Return, if array is  ` `    ``# empty or contains ` `    ``# a single element ` `    ``if` `n ``=``=` `0` `or` `n ``=``=` `1``: ` `        ``return` `n ` ` `  `    ``temp ``=` `list``(``range``(n)) ` ` `  `    ``# Start traversing elements ` `    ``j ``=` `0``; ` `    ``for` `i ``in` `range``(``0``, n``-``1``): ` ` `  `        ``# If current element is ` `        ``# not equal to next ` `        ``# element then store that ` `        ``# current element ` `        ``if` `arr[i] !``=` `arr[i``+``1``]: ` `            ``temp[j] ``=` `arr[i] ` `            ``j ``+``=` `1` ` `  `    ``# Store the last element ` `    ``# as whether it is unique ` `    ``# or repeated, it hasn't ` `    ``# stored previously ` `    ``temp[j] ``=` `arr[n``-``1``] ` `    ``j ``+``=` `1` `     `  `    ``# Modify original array ` `    ``for` `i ``in` `range``(``0``, j): ` `        ``arr[i] ``=` `temp[i] ` ` `  `    ``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``(n): ` `    ``print` `(``"%d"``%``(arr[i]), end ``=` `" "``) `

 `// Simple C# program to remove ` `// duplicates ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``// Function to remove duplicate ` `    ``// elements This function returns ` `    ``// new size of modified array. ` `    ``static` `int` `removeDuplicates(``int` `[]arr, ``int` `n) ` `    ``{ ` `         `  `        ``// Return, if array is empty ` `        ``// or contains a single element ` `        ``if` `(n == 0 || n == 1) ` `            ``return` `n; ` `     `  `        ``int` `[]temp = ``new` `int``[n]; ` `         `  `        ``// Start traversing elements ` `        ``int` `j = 0; ` `         `  `        ``for` `(``int` `i = 0; i < n - 1; i++) ` `         `  `            ``// If current element is not equal ` `            ``// to next element then store that ` `            ``// current element ` `            ``if` `(arr[i] != arr[i+1]) ` `                ``temp[j++] = arr[i]; ` `         `  `        ``// Store the last element as ` `        ``// whether it is unique or  ` `        ``// repeated, it hasn't ` `        ``// stored previously ` `        ``temp[j++] = arr[n-1];  ` `         `  `        ``// Modify original array ` `        ``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); ` ` `  `        ``// Print updated array ` `        ``for` `(``int` `i = 0; i < n; i++) ` `            ``Console.Write(arr[i] + ``" "``); ` `    ``} ` `} ` ` `  `// This code is contributed by nitin mittal. `

Output:
```1 2 3 4 5
```

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.

 `// C++ program to remove duplicates in-place ` `#include ` `using` `namespace` `std; ` ` `  `// Function to remove duplicate elements ` `// This function returns new size of modified ` `// array. ` `int` `removeDuplicates(``int` `arr[], ``int` `n) ` `{ ` `    ``if` `(n==0 || n==1) ` `        ``return` `n; ` ` `  `    ``// To store index of next unique element ` `    ``int` `j = 0; ` ` `  `    ``// Doing same as done in Method 1 ` `    ``// Just maintaining another updated index i.e. j ` `    ``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; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `arr[] = {1, 2, 2, 3, 4, 4, 4, 5, 5}; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]); ` ` `  `    ``// removeDuplicates() returns new size of ` `    ``// array. ` `    ``n = removeDuplicates(arr, n); ` ` `  `    ``// Print updated array ` `    ``for` `(``int` `i=0; i

 `// simple java program to remove ` `// duplicates ` ` `  `class` `Main ` `{ ` `    ``// Function to remove duplicate elements ` `    ``// This function returns new size of modified ` `    ``// array. ` `    ``static` `int` `removeDuplicates(``int` `arr[], ``int` `n) ` `    ``{ ` `        ``if` `(n == ``0` `|| n == ``1``) ` `            ``return` `n; ` `      `  `        ``// To store index of next unique element ` `        ``int` `j = ``0``; ` `      `  `        ``// Doing same as done in Method 1 ` `        ``// Just maintaining another updated index i.e. j ` `        ``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); ` `  `  `        ``// Print updated array ` `        ``for` `(``int` `i=``0``; i

 `# 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 ``=` `" "``) `

 `// simple C# program to remove ` `// duplicates ` `using` `System; ` ` `  `class` `GfG { ` `     `  `    ``// Function to remove duplicate ` `    ``// elements This function returns  ` `    ``// new size of modified array. ` `    ``static` `int` `removeDuplicates(``int` `[]arr, ``int` `n) ` `    ``{ ` `         `  `        ``if` `(n == 0 || n == 1) ` `            ``return` `n; ` `     `  `        ``// To store index of next ` `        ``// unique element ` `        ``int` `j = 0; ` `     `  `        ``// Doing same as done in Method 1 ` `        ``// Just maintaining another updated ` `        ``// index i.e. j ` `        ``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); ` ` `  `        ``// Print updated array ` `        ``for` `(``int` `i = 0; i < n; i++) ` `            ``Console.Write(arr[i] + ``" "``); ` `    ``} ` `} ` ` `  `// This code is contributed by parashar. `

Output:
```1 2 3 4 5
```

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 contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.