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

24 Jan, 2022
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
 
A naive approach is to scan the whole array and check if an element occurs twice, then return. This approach takes O(n) time.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++
Java
Python3
C#
PHP
Javascript
// C++ program to find the only repeating element in an// array of size n and elements from range 1 to n-1.#include <bits/stdc++.h>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 codeint 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 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]);    }}
# 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 codearr = [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
// 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// PHP 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,                              $low,                              $high){    // low = 0 , high = n-1;    if ($low > $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.?>
<script>      // 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, low, high)      {               // low = 0 , high = n-1;        if (low > high) return -1;         var mid = parseInt((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      var arr = [1, 2, 3, 3, 4, 5];      var n = arr.length;      var index = findRepeatingElement(arr, 0, n - 1);      if (index != -1) document.write(arr[index]);             // This code is contributed by rdtank.    </script>
Output :  
3
Time Complexity : O(log n)This article is contributed by Sahil Chhabra (KILLER). 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.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
nitin mittal
rdtank
satyaprakashbehera38
Arun KG
amartyaghoshgfg
Binary Search
Arrays
Divide and Conquer
Arrays
Divide and Conquer
Binary Search
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Stack Data Structure (Introduction and Program)
Introduction to Arrays
Multidimensional Arrays in Java
Merge Sort
QuickSort
Binary Search
Maximum and minimum of an array using minimum number of comparisons
Program for Tower of Hanoi