Find the only repetitive element between 1 to n-1

We are given an array arr[] of size n. Numbers are from 1 to (n-1) in random order. The array has only one repetitive element. We need to find the repetitive element.

Examples :

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

Input  : a[] = {1, 5, 1, 2, 3, 4}
Output : 1

Method 1 (Simple) We use two nested loops. The outer loop traverses through all elements and the inner loop check if the element picked by outer loop appears anywhere else.



Time Complexity : O(n*n)

Method 2 (Using Sum Formula): We know sum of first n-1 natural numbers is (n – 1)*n/2. We compute sum of array elements and subtract natural number sum from it to find the only missing element.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
#include <bits/stdc++.h>
using namespace std;
  
int findRepeating(int arr[], int n)
{
   // Find array sum and subtract sum
   // first n-1 natural numbers from it
   // to find the result.
   return accumulate(arr , arr+n , 0) - 
                   ((n - 1) * n/2);
}
  
// driver code
int main()
{   
    int arr[] = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << findRepeating(arr, n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the only repeating 
// element in an array where elements are 
// from 1 to n-1.
import java.io.*;
import java.util.*; 
  
class GFG 
{
  
    static int findRepeating(int[] arr, int n)
    {
        // Find array sum and subtract sum 
        // first n-1 natural numbers from it 
        // to find the result.
  
        int sum = 0;
        for (int i = 0; i < n; i++)
            sum += arr[i];
        return sum - (((n - 1) * n) / 2); 
    }
  
    // Driver code
    public static void main(String args[]) 
    {
        int[] arr = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
        int n = arr.length;
        System.out.println(findRepeating(arr, n));
    }
}
  
// This code is contributed by rachana soma

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the only 
# repeating element in an array where 
# elements are from 1 to n-1.
  
def findRepeating(arr, n):
      
    # Find array sum and subtract sum
    # first n-1 natural numbers from it
    # to find the result.
    return sum(arr) -(((n - 1) * n) // 2)
  
# Driver Code
arr = [9, 8, 2, 6, 1, 8, 5, 3, 4, 7]
n = len(arr)
print(findRepeating(arr, n))
  
# This code is contributed 
# by mohit kumar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the only repeating 
// element in an array where elements are 
// from 1 to n-1.
using System; 
  
class GFG 
{
  
    static int findRepeating(int[] arr, int n)
    {
        // Find array sum and subtract sum 
        // first n-1 natural numbers from it 
        // to find the result.
  
        int sum = 0;
        for (int i = 0; i < n; i++)
            sum += arr[i];
        return sum - (((n - 1) * n) / 2); 
    }
  
    // Driver code
    public static void Main(String []args) 
    {
        int[] arr = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
        int n = arr.Length;
        Console.WriteLine(findRepeating(arr, n));
    }
}
  
/* This code contributed by PrinciRaj1992 */

chevron_right


Output :

8

Time Complexity : O(n)
Auxiliary Space : O(1)
Causes overflow for large arrays.

Method 3 (Use Hashing): Use a hash table to store elements visited. If a seen element appears again, we return it.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
#include <bits/stdc++.h>
using namespace std;
  
int findRepeating(int arr[], int n)
{
   unordered_set<int> s;
   for (int i=0; i<n; i++)
   {
      if (s.find(arr[i]) != s.end())
         return arr[i];
      s.insert(arr[i]);
   }
     
   // If input is correct, we should 
   // never reach here
   return -1;
}
  
// driver code
int main()
{   
    int arr[] = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << findRepeating(arr, n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

import java.util.*;
// Java program to find the only repeating 
// element in an array where elements are 
// from 1 to n-1.
  
class GFG 
{
  
static int findRepeating(int arr[], int n) 
    HashSet<Integer> s = new HashSet<Integer>();
    for (int i = 0; i < n; i++) 
    
        if (s.contains(arr[i])) 
            return arr[i]; 
        s.add(arr[i]); 
    
      
    // If input is correct, we should 
    // never reach here 
    return -1
  
// Driver code 
public static void main(String[] args) 
{
    int arr[] = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 }; 
    int n = arr.length;
    System.out.println(findRepeating(arr, n));;
}
}
  
// This code is contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the only 
# repeating element in an array 
# where elements are from 1 to n-1. 
def findRepeating(arr, n):
    s = set()
    for i in range(n):
        if arr[i] in s:
            return arr[i]
        s.add(arr[i])
      
    # If input is correct, we should 
    # never reach here 
    rteurn -1
  
# Driver code
arr = [9, 8, 2, 6, 1, 8, 5, 3]
n = len(arr)
print(findRepeating(arr, n))
  
# This code is contributed 
# by Shrikant13

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the only repeating 
// element in an array where elements are 
// from 1 to n-1.
using System;
using System.Collections.Generic;
  
class GFG 
{
  
static int findRepeating(int []arr, int n) 
    HashSet<int> s = new HashSet<int>();
    for (int i = 0; i < n; i++) 
    
        if (s.Contains(arr[i])) 
            return arr[i]; 
        s.Add(arr[i]); 
    
      
    // If input is correct, we should 
    // never reach here 
    return -1; 
  
// Driver code 
public static void Main(String[] args) 
{
    int []arr = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 }; 
    int n = arr.Length;
    Console.WriteLine(findRepeating(arr, n));;
}
}
  
// This code has been contributed by 29AjayKumar

chevron_right


Output :

8

Time Complexity : O(n)
Auxiliary Space : O(n)

Method 4(Use XOR): The idea is based on the fact that x ^ x = 0 and x ^ y = y ^ x.
1) Compute XOR of elements from 1 to n-1.
2) Compute XOR of array elements.
3) XOR of above two would be our result.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
#include <bits/stdc++.h>
using namespace std;
  
int findRepeating(int arr[], int n)
{
  
   // res is going to store value of
   // 1 ^ 2 ^ 3 .. ^ (n-1) ^ arr[0] ^ 
   // arr[1] ^ .... arr[n-1]
   int res = 0;
   for (int i=0; i<n-1; i++)
       res = res ^ (i+1) ^ arr[i];
   res = res ^ arr[n-1];
     
   return res;
}
  
// driver code
int main()
{   
    int arr[] = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << findRepeating(arr, n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
class GFG
{
      
    static int findRepeating(int arr[], int n)
    {
      
        // res is going to store value of
        // 1 ^ 2 ^ 3 .. ^ (n-1) ^ arr[0] ^ 
        // arr[1] ^ .... arr[n-1]
        int res = 0;
        for (int i = 0; i < n - 1; i++)
            res = res ^ (i + 1) ^ arr[i];
        res = res ^ arr[n - 1];
              
        return res;
    }
      
    // Driver code
    public static void main(String[] args)
    
        int arr[] = { 9, 8, 2, 6, 1, 8, 5, 3, 4, 7 };
        int n = arr.length;
        System.out.println(findRepeating(arr, n));
    }
}
  
// This code is contributed by 
// Smitha Dinesh Semwal.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the only 
# repeating element in an array where 
# elements are from 1 to n-1.
  
def findRepeating(arr, n):
      
    # res is going to store value of
    # 1 ^ 2 ^ 3 .. ^ (n-1) ^ arr[0] ^ 
    # arr[1] ^ .... arr[n-1]
    res = 0
    for i in range(0, n-1):
        res = res ^ (i+1) ^ arr[i]
    res = res ^ arr[n-1]
          
    return res
      
# Driver code
arr = [9, 8, 2, 6, 1, 8, 5, 3, 4, 7
n = len(arr) 
print(findRepeating(arr, n))
  
# This code is contributed by Smitha Dinesh Semwal.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the 
// only repeating element 
// in an array where elements 
// are from 1 to n-1.
using System;
  
class GFG
{
    static int findRepeating(int []arr, 
                             int n)
    {
      
        // res is going to store 
        // value of 1 ^ 2 ^ 3 .. 
        // ^ (n-1) ^ arr[0] ^ 
        // arr[1] ^ .... arr[n-1]
        int res = 0;
        for (int i = 0; i < n - 1; i++)
            res = res ^ (i + 1) ^ arr[i];
        res = res ^ arr[n - 1];
              
        return res;
    }
      
    // Driver code
    public static void Main()
    
        int []arr = { 9, 8, 2, 6, 1, 
                      8, 5, 3, 4, 7 };
        int n = arr.Length;
        Console.Write(findRepeating(arr, n));
    }
}
  
// This code is contributed
// by Smitha Dinesh Semwal.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find the only repeating
// element in an array where elements are
// from 1 to n-1.
  
function findRepeating($arr, $n)
{
  
    // res is going to store value of
    // 1 ^ 2 ^ 3 .. ^ (n-1) ^ arr[0] ^ 
    // arr[1] ^ .... arr[n-1]
    $res = 0;
    for($i = 0; $i < $n - 1; $i++)
        $res = $res ^ ($i + 1) ^ $arr[$i];
    $res = $res ^ $arr[$n - 1];
          
    return $res;
}
  
    // Driver Code
    $arr =array(9, 8, 2, 6, 1, 8, 5, 3, 4, 7);
    $n = sizeof($arr) ;
    echo findRepeating($arr, $n);
      
// This code is contributed by ajit
?>

chevron_right


Output:

8

Time Complexity : O(n)
Auxiliary Space : O(1)

Method 5 : Using indexing.
1. Iterate through the array.
2. For every index visit a[index], if it is positive change the sign of element at a[index] index, else print the element.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find the only 
// repeating element in an array 
// where elements are from 1 to n-1.
#include <bits/stdc++.h>
using namespace std;
  
// Function to find repeted element
int findRepeating(int arr[], int n)
{
    int missingElement = 0;
  
    // indexing based
    for (int i = 0; i < n; i++){
  
        int element = arr[abs(arr[i])];
  
        if(element < 0){
            missingElement = arr[i];
            break;
        }
      
    arr[abs(arr[i])] = -arr[abs(arr[i])];
}
  
return abs(missingElement);
  
}
  
// driver code
int main()
{
    int arr[] = { 5, 4, 3, 9, 8,
                  9, 1, 6, 2, 5};
  
    int n = sizeof(arr) / sizeof(arr[0]);
  
    cout << findRepeating(arr, n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the only 
// repeating element in an array 
// where elements are from 1 to n-1.
import java.lang.Math.*;
  
class GFG
{
    // Function to find repeted element
    static int findRepeating(int arr[], int n)
    {
        int missingElement = 0;
      
        // indexing based
        for (int i = 0; i < n; i++){
      
            int element = arr[Math.abs(arr[i])];
      
            if(element < 0){
                missingElement = arr[i];
                break;
            }
          
        arr[Math.abs(arr[i])] = -arr[Math.abs(arr[i])];
    }
      
    return Math.abs(missingElement);
      
    }
      
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 5, 4, 3, 9, 8,
                    9, 1, 6, 2, 5};
      
        int n = arr.length;
      
        System.out.println(findRepeating(arr, n));
      
    }
}
// This code is contributed by 
// Smitha Dinesh Semwal.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the only 
# repeating element in an array 
# where elements are from 1 to n-1.
  
# Function to find repeted element
def findRepeating(arr, n):
  
    missingElement = 0
  
    # indexing based
    for i in range(0, n):
  
        element = arr[abs(arr[i])]
  
        if(element < 0):
            missingElement = arr[i]
            break
          
        arr[abs(arr[i])] = -arr[abs(arr[i])]
      
    return abs(missingElement)
  
# Driver code
arr = [5, 4, 3, 9, 8, 9, 1, 6, 2, 5]
n = len(arr)
print(findRepeating(arr, n))
  
# This code is contributed by Smitha Dinesh Semwal.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

using System;
  
// C# program to find the only 
// repeating element in an array 
// where elements are from 1 to n-1. 
  
  
public class GFG
{
    // Function to find repeted element 
    public static int findRepeating(int[] arr, int n)
    {
        int missingElement = 0;
  
        // indexing based 
        for (int i = 0; i < n; i++)
        {
  
            int element = arr[Math.Abs(arr[i])];
  
            if (element < 0)
            {
                missingElement = arr[i];
                break;
            }
  
        arr[Math.Abs(arr[i])] = -arr[Math.Abs(arr[i])];
        }
  
    return Math.Abs(missingElement);
  
    }
  
    // Driver code 
    public static void Main(string[] args)
    {
        int[] arr = new int[] {5, 4, 3, 9, 8, 9,
                                1, 6, 2, 5};
  
        int n = arr.Length;
  
        Console.WriteLine(findRepeating(arr, n));
  
    }
}
  
// This code is contributed by Shrikant13

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find the only 
// repeating element in an array 
// where elements are from 1 to n-1.
  
// Function to find repeted element
function findRepeating($arr, $n)
{
    $missingElement = 0;
  
    // indexing based
    for ($i = 0; $i < $n; $i++)
    {
  
        $element = $arr[abs($arr[$i])];
  
        if($element < 0)
        {
            $missingElement = $arr[$i];
            break;
        }
      
    $arr[abs($arr[$i])] = -$arr[abs($arr[$i])];
}
  
return abs($missingElement);
  
}
  
// Driver Code
$arr = array (5, 4, 3, 9, 8,
              9, 1, 6, 2, 5);
  
$n = sizeof($arr);
  
echo findRepeating($arr, $n);
  
// This code is contributed by ajit
?>

chevron_right



Output :

9

Time Complexiy : O(n)
Auxiliary Space : O(1)



My Personal Notes arrow_drop_up

Maths is the language of nature

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.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.