# Find the only repeating element in a sorted array of size n

Given a sorted array of n elements containing elements in range from 1 to n-1 i.e. one element occurs twice, the task is to find the repeating element in an array.

Examples :

```Input :  arr[] = { 1, 2 , 3 , 4 , 4}
Output :  4

Input :  arr[] = { 1 , 1 , 2 , 3 , 4}
Output :  1```

Brute Force:

1. Traverse the input array using a for a loop.
2. For each element in the array, traverse the remaining part of the array using another for loop.
3. For each subsequent element, check if it is equal to the current element.
4. If a match is found, return the current element.
5. If no match is found, continue with the next element in the outer loop.
6. If the outer loop completes without finding a match, return -1 to indicate that there is no repeating element in the array.

Below is the implementation of the above approach:

## C++

 `// C++ program to find the only repeating element in an ` `// array of size n and elements from range 1 to n-1. ` `#include ` `using` `namespace` `std; ` ` `  ` `  `// Returns index of second appearance of a repeating element ` `// The function assumes that array elements are in range from ` `// 1 to n-1. ` `int` `FindRepeatingElement(``int` `arr[], ``int` `size){ ` `    ``for``(``int` `i=0; i

## Java

 `import` `java.util.*; ` ` `  `public` `class` `Main { ` ` `  `    ``// Returns index of second appearance of a repeating element ` `    ``// The function assumes that array elements are in range from ` `    ``// 1 to n-1. ` `    ``public` `static` `int` `findRepeatingElement(``int` `arr[], ``int` `size){ ` `        ``for``(``int` `i=``0``; i

## Python3

 `# Python3 program to find the only repeating element in an ` `# array of size n and elements from range 1 to n-1. ` ` `  `# Returns second appearance of a repeating element ` `# The function assumes that array elements are in range from ` `# 1 to n-1. ` `def` `FindRepeatingElement(arr, size): ` `    ``for` `i ``in` `range``(size): ` `        ``for` `j ``in` `range``(i``+``1``, size): ` `            ``if` `arr[i] ``=``=` `arr[j]: ` `                ``return` `arr[i] ` `    ``return` `-``1` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``arr ``=` `[``1``, ``2``, ``3``, ``4``, ``4``] ` `    ``n ``=` `len``(arr) ` `    ``element ``=` `FindRepeatingElement(arr, n) ` `    ``if` `element !``=` `-``1``: ` `        ``print``(element) `

## C#

 `using` `System; ` ` `  `public` `class` `Program ` `{ ` ` `  `  ``// Returns index of second appearance of a repeating element ` `  ``// The function assumes that array elements are in range from ` `  ``// 1 to n-1. ` `  ``public` `static` `int` `FindRepeatingElement(``int``[] arr, ``int` `size) ` `  ``{ ` `    ``for` `(``int` `i = 0; i < size; i++) ` `    ``{ ` `      ``for` `(``int` `j = i + 1; j < size; j++) ` `      ``{ ` `        ``if` `(arr[i] == arr[j]) ` `        ``{ ` `          ``return` `i; ` `        ``} ` `      ``} ` `    ``} ` `    ``return` `-1; ` `  ``} ` ` `  `  ``// Driver code ` `  ``public` `static` `void` `Main() ` `  ``{ ` `    ``int``[] arr = { 1, 2, 3, 4, 4 }; ` `    ``int` `n = arr.Length; ` `    ``int` `index = FindRepeatingElement(arr, n); ` `    ``if` `(index != -1) ` `    ``{ ` `      ``Console.WriteLine(arr[index]); ` `    ``} ` `  ``} ` `} `

## Javascript

 `// JavaScript program to find the only repeating element in an ` `// array of size n and elements from range 1 to n-1. ` ` `  `// Returns index of second appearance of a repeating element ` `// The function assumes that array elements are in range from ` `// 1 to n-1. ` `function` `FindRepeatingElement(arr, size) ` `{ ` `    ``for``(let i=0; i

Output

`4`

Time Complexity: O(N^2)
Auxiliary Space: O(1)

An efficient method is to use Binary Search.

Observation: If an element ‘X’ is repeating, then it must be at index ‘X’ in the array. So the problem reduces to find any element whose value is same as its index.

## C++

 `// C++ program to find the only repeating element in an  ` `// array of size n and elements from range 1 to n-1.  ` `#include   ` `using` `namespace` `std;  ` ` `  ` `  `// Returns index of second appearance of a repeating element  ` `// The function assumes that array elements are in range from  ` `// 1 to n-1.  ` `int` `FindRepeatingElement(``int` `arr[], ``int` `size){ ` `    ``int` `lo = 0; ` `    ``int` `hi = size - 1; ` `    ``int` `mid; ` `     `  `    ``while``(lo <= hi){ ` `        ``mid = (lo+hi)/2; ` `         `  `        ``if``(arr[mid] <= mid){ ` `            ``hi = mid-1; ` `        ``} ` `        ``else``{ ` `            ``lo = mid + 1; ` `        ``} ` `    ``} ` `     `  `    ``return` `lo; ` `} ` ` `  `// Driver code  ` `int` `main()  ` `{  ` `    ``int` `arr[] = {1, 2, 3, 3, 4, 5};  ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);  ` `    ``int` `index = FindRepeatingElement(arr, n);  ` `    ``if` `(index != -1)  ` `        ``cout << arr[index];  ` `    ``return` `0;  ` `}  `

## Java

 `// Java program to find the only repeating element in an ` `// array of size n and elements from range 1 to n-1. ` ` `  `class` `Test ` `{ ` `    ``// Returns index of second appearance of a repeating element ` `    ``// The function assumes that array elements are in range from ` `    ``// 1 to n-1. ` `    ``static` `int` `findRepeatingElement(``int` `arr[], ``int` `low, ``int` `high) ` `    ``{ ` `        ``// low = 0 , high = n-1; ` `        ``if` `(low > high) ` `            ``return` `-``1``; ` `      `  `        ``int` `mid = (low + high) / ``2``; ` `      `  `        ``// Check if the mid element is the repeating one ` `        ``if` `(arr[mid] != mid + ``1``) ` `        ``{ ` `            ``if` `(mid > ``0` `&& arr[mid]==arr[mid-``1``]) ` `                ``return` `mid; ` `      `  `            ``// If mid element is not at its position that means ` `            ``// the repeated element is in left ` `            ``return`  `findRepeatingElement(arr, low, mid-``1``); ` `        ``} ` `      `  `        ``// If mid is at proper position then repeated one is in ` `        ``// right. ` `        ``return` `findRepeatingElement(arr, mid+``1``, high); ` `    ``} ` `     `  `    ``// Driver method ` `    ``public` `static` `void` `main(String[] args)  ` `    ``{ ` `        ``int`  `arr[] = {``1``, ``2``, ``3``, ``3``, ``4``, ``5``}; ` `        ``int` `index = findRepeatingElement(arr, ``0``, arr.length-``1``); ` `        ``if` `(index != -``1``) ` `            ``System.out.println(arr[index]); ` `    ``} ` `} `

## Python3

 `# Python program to find the only repeating element in an ` `# array of size n and elements from range 1 to n-1 ` ` `  `# Returns index of second appearance of a repeating element ` `# The function assumes that array elements are in range from ` `# 1 to n-1. ` `def` `findRepeatingElement(arr, low, high): ` ` `  `    ``# low = 0 , high = n-1 ` `    ``if` `low > high: ` `        ``return` `-``1` ` `  `    ``mid ``=` `(low ``+` `high) ``/``/` `2` ` `  `    ``# Check if the mid element is the repeating one ` `    ``if` `(arr[mid] !``=` `mid ``+` `1``): ` `     `  `        ``if` `(mid > ``0` `and` `arr[mid]``=``=``arr[mid``-``1``]): ` `            ``return` `mid ` ` `  `        ``# If mid element is not at its position that means ` `        ``# the repeated element is in left ` `        ``return`  `findRepeatingElement(arr, low, mid``-``1``) ` ` `  `    ``# If mid is at proper position then repeated one is in ` `    ``# right. ` `    ``return` `findRepeatingElement(arr, mid``+``1``, high) ` ` `  `# Driver code ` `arr ``=` `[``1``, ``2``, ``3``, ``3``, ``4``, ``5``] ` `n ``=` `len``(arr) ` `index ``=` `findRepeatingElement(arr, ``0``, n``-``1``) ` `if` `(index ``is` `not` `-``1``): ` `    ``print` `(arr[index]) ` ` `  `#This code is contributed by Afzal Ansari `

## Javascript

 ``

## C#

 `// C# program to find the only repeating ` `// element in an array of size n and  ` `// elements from range 1 to n-1. ` `using` `System; ` ` `  `class` `Test ` `{ ` `    ``// Returns index of second appearance of a ` `    ``// repeating element. The function assumes that ` `    ``// array elements are in range from 1 to n-1. ` `    ``static` `int` `findRepeatingElement(``int` `[]arr, ``int` `low, ` `                                              ``int` `high) ` `    ``{ ` `        ``// low = 0 , high = n-1; ` `        ``if` `(low > high) ` `            ``return` `-1; ` `     `  `        ``int` `mid = (low + high) / 2; ` `     `  `        ``// Check if the mid element  ` `        ``// is the repeating one ` `        ``if` `(arr[mid] != mid + 1) ` `        ``{ ` `            ``if` `(mid > 0 && arr[mid]==arr[mid-1]) ` `                ``return` `mid; ` `     `  `            ``// If mid element is not at its position ` `            ``// that means the repeated element is in left ` `            ``return` `findRepeatingElement(arr, low, mid-1); ` `        ``} ` `     `  `        ``// If mid is at proper position  ` `        ``// then repeated one is in right. ` `        ``return` `findRepeatingElement(arr, mid+1, high); ` `    ``} ` `     `  `    ``// Driver method ` `    ``public` `static` `void` `Main()  ` `    ``{ ` `        ``int` `[]arr = {1, 2, 3, 3, 4, 5}; ` `        ``int` `index = findRepeatingElement(arr, 0, arr.Length-1); ` `        ``if` `(index != -1) ` `        ``Console.Write(arr[index]); ` `    ``} ` `} ` ` `  `// This code is contributed by Nitin Mittal. `

## PHP

 ` ``\$high``) ` `        ``return` `-1; ` ` `  `    ``\$mid` `= ``floor``((``\$low` `+ ``\$high``) / 2); ` ` `  `    ``// Check if the mid element ` `    ``// is the repeating one ` `    ``if` `(``\$arr``[``\$mid``] != ``\$mid` `+ 1) ` `    ``{ ` `        ``if` `(``\$mid` `> 0 && ``\$arr``[``\$mid``] ==  ` `                        ``\$arr``[``\$mid` `- 1]) ` `            ``return` `\$mid``; ` ` `  `        ``// If mid element is not at  ` `        ``// its position that means ` `        ``// the repeated element is in left ` `        ``return` `findRepeatingElement(``\$arr``, ``\$low``,  ` `                                    ``\$mid` `- 1); ` `    ``} ` ` `  `    ``// If mid is at proper position ` `    ``// then repeated one is in right. ` `    ``return` `findRepeatingElement(``\$arr``, ``\$mid` `+ 1,  ` `                                        ``\$high``); ` `} ` ` `  `// Driver code ` `\$arr` `= ``array``(1, 2, 3, 3, 4, 5); ` `\$n` `= sizeof(``\$arr``); ` `\$index` `= findRepeatingElement(``\$arr``, 0,  ` `                              ``\$n` `- 1); ` `if` `(``\$index` `!= -1) ` `echo` `\$arr``[``\$index``]; ` ` `  `// This code is contributed ` `// by nitin mittal.  ` `?> `

Output

`3`

Time Complexity : O(log n)

Space Complexity: O(1)

If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Previous
Next