Open In App

Find the two repeating elements in a given array

Given an array arr[] of N+2 elements. All elements of the array are in the range of 1 to N. And all elements occur once except two numbers which occur twice. Find the two repeating numbers. 

Examples:



Input: arr = [4, 2, 4, 5, 2, 3, 1], N = 5
Output: 4 2
Explanation: The above array has n + 2 = 7 elements with all elements occurring once except 2 and 4 which occur twice. So the output should be 4 2.

Input: arr = [2, 1, 2, 1, 3], N = 3
Output: 1 2
Explanation: The above array has n + 2 = 5 elements with all elements occurring once except 1 and 2 which occur twice. So the output should be 1 2.



Recommended Practice

Naive Approach:

The idea is to use two loops. 

Follow the steps below to solve the problem:

Below is the implementation of the above approach.




// C++ program to Find the two repeating
// elements in a given array
#include <bits/stdc++.h>
using namespace std;
 
void printTwoRepeatNumber(int arr[], int size)
{
    int i, j;
    cout << "Repeating elements are ";
    for (i = 0; i < size; i++) {
        for (j = i + 1; j < size; j++) {
            if (arr[i] == arr[j]) {
                cout << arr[i] << " ";
                break;
            }
        }
    }
}
 
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
   
    printTwoRepeatNumber(arr, arr_size);
    return 0;
}




#include <stdio.h>
#include <stdlib.h>
void printRepeating(int arr[], int size)
{
    int i, j;
    printf(" Repeating elements are ");
    for (i = 0; i < size - 1; i++)
        for (j = i + 1; j < size; j++)
            if (arr[i] == arr[j])
                printf("%d ", arr[i]);
}
 
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    printRepeating(arr, arr_size);
    getchar();
    return 0;
}




// Java code to implement the approach
 
import java.io.*;
 
class RepeatElement {
    void printRepeating(int arr[], int size)
    {
        int i, j;
        System.out.print("Repeating Elements are ");
        for (i = 0; i < size - 1; i++) {
            for (j = i + 1; j < size; j++) {
                if (arr[i] == arr[j])
                    System.out.print(arr[i] + " ");
            }
        }
    }
 
    public static void main(String[] args)
    {
        RepeatElement repeat = new RepeatElement();
        int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.length;
        repeat.printRepeating(arr, arr_size);
    }
}




# Python3 program to Find the two
# repeating elements in a given array
 
 
def printRepeating(arr, size):
 
    print("Repeating elements are", end=' ')
    for i in range(0, size-1):
        for j in range(i + 1, size):
            if arr[i] == arr[j]:
                print(arr[i], end=' ')
 
 
# Driver code
arr = [4, 2, 4, 5, 2, 3, 1]
arr_size = len(arr)
printRepeating(arr, arr_size)
 
# This code is contributed by Smitha Dinesh Semwal




using System;
 
class GFG {
 
    static void printRepeating(int[] arr, int size)
    {
        int i, j;
 
        Console.Write("Repeating Elements are ");
        for (i = 0; i < size - 1; i++) {
            for (j = i + 1; j < size; j++) {
                if (arr[i] == arr[j])
                    Console.Write(arr[i] + " ");
            }
        }
    }
    // driver code
    public static void Main()
    {
        int[] arr = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.Length;
 
        printRepeating(arr, arr_size);
    }
}
 
// This code is contributed by Sam007




<?php
// PHP program to Find the two
// repeating elements in
// a given array
 
function printRepeating($arr, $size)
{
    $i;
    $j;
    echo " Repeating elements are ";
 
    for($i = 0; $i < $size-1; $i++)
        for($j = $i + 1; $j < $size; $j++)
            if($arr[$i] == $arr[$j])
                echo $arr[$i], " ";
}
 
// Driver Code
$arr = array(4, 2, 4, 5, 2, 3, 1);
$arr_size = sizeof($arr, 0);
printRepeating($arr, $arr_size);
 
// This code is contributed by Ajit
?>




<script>
    function printRepeating(arr , size)
    {
        var i, j;
        document.write("Repeating Elements are ");
        for (i = 0; i < size-1; i++)
        {
            for (j = i + 1; j < size; j++)
            {
                if (arr[i] == arr[j])
                    document.write(arr[i] + " ");
            }
        }
    }
 
var arr = [4, 2, 4, 5, 2, 3, 1];
var arr_size = arr.length;
printRepeating(arr, arr_size);
 
// This code is contributed by 29AjayKumar
</script>

Output
Repeating elements are 4 2 

Time Complexity: O(N*N), Iterating over the array of size N for all the N elements.
Auxiliary Space: O(1)

Find the two repeating elements in a given array using Visited Array:

The idea is to keep track of elements. Whenever an element is encountered that is already present then print that element.

Follow the steps below to solve the problem:

Below is the implementation of the above approach:




// C++ implementation of above approach
#include <bits/stdc++.h>
using namespace std;
 
void printRepeating(int arr[], int size)
{
    int* count = new int[sizeof(int) * (size - 2)];
    int i;
 
    cout << " Repeating elements are ";
    for (i = 0; i < size; i++) {
        if (count[arr[i]] == 1)
            cout << arr[i] << " ";
        else
            count[arr[i]]++;
    }
}
 
// Driver code
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    printRepeating(arr, arr_size);
    return 0;
}
 
// This is code is contributed by rathbhupendra




#include <stdio.h>
#include <stdlib.h>
 
void printRepeating(int arr[], int size)
{
    int* count = (int*)calloc(sizeof(int), (size - 2));
    int i;
 
    printf(" Repeating elements are ");
    for (i = 0; i < size; i++) {
        if (count[arr[i]] == 1)
            printf("%d ", arr[i]);
        else
            count[arr[i]]++;
    }
}
 
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    printRepeating(arr, arr_size);
    getchar();
    return 0;
}




import java.io.*;
 
class RepeatElement {
    void printRepeating(int arr[], int size)
    {
        int count[] = new int[size];
        int i;
 
        System.out.print("Repeating elements are ");
        for (i = 0; i < size; i++) {
            if (count[arr[i]] == 1)
                System.out.print(arr[i] + " ");
            else
                count[arr[i]]++;
        }
    }
 
    public static void main(String[] args)
    {
        RepeatElement repeat = new RepeatElement();
        int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.length;
        repeat.printRepeating(arr, arr_size);
    }
}




# Python3 code for Find the two repeating
# elements in a given array
 
 
def printRepeating(arr, size):
    count = [0] * size
    print(" Repeating elements are ", end="")
    for i in range(0, size):
        if(count[arr[i]] == 1):
            print(arr[i], end=" ")
        else:
            count[arr[i]] = count[arr[i]] + 1
 
 
# Driver code
arr = [4, 2, 4, 5, 2, 3, 1]
arr_size = len(arr)
printRepeating(arr, arr_size)
 
 
# This code is contributed by Nikita Tiwari.




// C# program to Find the two
// repeating elements in a given array
using System;
 
class GFG {
 
    static void printRepeating(int[] arr, int size)
    {
        int[] count = new int[size];
        int i;
 
        Console.Write("Repeating elements are ");
        for (i = 0; i < size; i++) {
            if (count[arr[i]] == 1)
                Console.Write(arr[i] + " ");
            else
                count[arr[i]]++;
        }
    }
 
    // driver code
    public static void Main()
    {
        int[] arr = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.Length;
 
        printRepeating(arr, arr_size);
    }
}
 
// This code is contributed by Sam007




<?php
// PHP program to Find the two
// repeating elements in a given array
function printRepeating($arr, $size)
{
    $count = array_fill(0, $size, 0);
    echo "Repeating elements are ";
    for ($i = 0; $i < $size; $i++)
    {
        if ($count[$arr[$i]] == 1)
            echo $arr[$i]." ";
        else
            $count[$arr[$i]]++;
    }
}
 
// Driver code
$arr = array(4, 2, 4, 5, 2, 3, 1);
$arr_size = count($arr);
 
printRepeating($arr, $arr_size);
         
// This code is contributed by mits
?>




<script>
 
    // Javascript program to Find the two
    // repeating elements in a given array
       
    function printRepeating(arr, size)
    {
        let count = new Array(size);
        count.fill(0);
        let i;
  
        document.write("Repeating elements are ");
        for (i = 0; i < size; i++)
        {
            if (count[arr[i]] == 1)
                document.write(arr[i] + " ");
            else
                count[arr[i]]++;
        }
    }
     
    let arr = [4, 2, 4, 5, 2, 3, 1];
    let arr_size = arr.length;
 
    printRepeating(arr, arr_size);
     
</script>

Output
 Repeating elements are 4 2 

Time Complexity: O(N), Traversing the array of size N
Auxiliary Space: O(N), Count array of size N to keep track of elements

Find the two repeating elements in a given array using Mathematics:

The idea is to calculate the sum and product of elements that are repeating in the array and using those two equations find those repeating elements.

Follow the steps below to solve the problem:

Below is the implementation of the above approach:




#include <bits/stdc++.h>
using namespace std;
 
/* function to get factorial of n */
int fact(int n);
 
void printRepeating(int arr[], int size)
{
    int S = 0; /* S is for sum of elements in arr[] */
    int P = 1; /* P is for product of elements in arr[] */
    int x, y; /* x and y are two repeating elements */
    int D; /* D is for difference of x and y, i.e., x-y*/
    int n = size - 2, i;
 
    /* Calculate Sum and Product of all elements in arr[] */
    for (i = 0; i < size; i++) {
        S = S + arr[i];
        P = P * arr[i];
    }
 
    S = S - n * (n + 1) / 2; /* S is x + y now */
    P = P / fact(n); /* P is x*y now */
 
    D = sqrt(S * S - 4 * P); /* D is x - y now */
 
    x = (D + S) / 2;
    y = (S - D) / 2;
 
    cout << "Repeating elements are " << x << " " << y;
}
 
int fact(int n) { return (n == 0) ? 1 : n * fact(n - 1); }
 
// Driver code
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    printRepeating(arr, arr_size);
    return 0;
}
 
// This code is contributed by rathbhupendra




import java.io.*;
 
class RepeatElement {
    void printRepeating(int arr[], int size)
    {
        /* S is for sum of elements in arr[] */
        int S = 0;
 
        /* P is for product of elements in arr[] */
        int P = 1;
 
        /* x and y are two repeating elements */
        int x, y;
 
        /* D is for difference of x and y, i.e., x-y*/
        int D;
 
        int n = size - 2, i;
 
        /* Calculate Sum and Product of all elements in
         * arr[] */
        for (i = 0; i < size; i++) {
            S = S + arr[i];
            P = P * arr[i];
        }
 
        /* S is x + y now */
        S = S - n * (n + 1) / 2;
 
        /* P is x*y now */
        P = P / fact(n);
 
        /* D is x - y now */
        D = (int)Math.sqrt(S * S - 4 * P);
 
        x = (D + S) / 2;
        y = (S - D) / 2;
 
        System.out.println(
            "The two repeating elements are :");
        System.out.print(x + " " + y);
    }
 
    int fact(int n)
    {
        return (n == 0) ? 1 : n * fact(n - 1);
    }
 
    public static void main(String[] args)
    {
        RepeatElement repeat = new RepeatElement();
        int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.length;
        repeat.printRepeating(arr, arr_size);
    }
}
 
// This code has been contributed by Mayank Jaiswal




# Python3 code for Find the two repeating
# elements in a given array
import math
 
 
def printRepeating(arr, size):
 
    # S is for sum of elements in arr[]
    S = 0
 
    # P is for product of elements in arr[]
    P = 1
 
    n = size - 2
 
    # Calculate Sum and Product
    # of all elements in arr[]
    for i in range(0, size):
        S = S + arr[i]
        P = P * arr[i]
 
    # S is x + y now
    S = S - n * (n + 1) // 2
 
    # P is x*y now
    P = P // fact(n)
 
    # D is x - y now
    D = math.sqrt(S * S - 4 * P)
 
    x = (D + S) // 2
    y = (S - D) // 2
 
    print("Repeating elements are ",
          (int)(x), " ", (int)(y))
 
 
def fact(n):
    if(n == 0):
        return 1
    else:
        return(n * fact(n - 1))
 
 
# Driver code
arr = [4, 2, 4, 5, 2, 3, 1]
arr_size = len(arr)
printRepeating(arr, arr_size)
 
 
# This code is contributed by Nikita Tiwari.




using System;
 
class GFG {
 
    static void printRepeating(int[] arr, int size)
    {
        /* S is for sum of elements in arr[] */
        int S = 0;
 
        /* P is for product of elements in arr[] */
        int P = 1;
 
        /* x and y are two repeating elements */
        int x, y;
 
        /* D is for difference of x and y, i.e., x-y*/
        int D;
 
        int n = size - 2, i;
 
        /* Calculate Sum and Product
         of all elements in arr[] */
        for (i = 0; i < size; i++) {
            S = S + arr[i];
            P = P * arr[i];
        }
 
        /* S is x + y now */
        S = S - n * (n + 1) / 2;
 
        /* P is x*y now */
        P = P / fact(n);
 
        /* D is x - y now */
        D = (int)Math.Sqrt(S * S - 4 * P);
 
        x = (D + S) / 2;
        y = (S - D) / 2;
 
        Console.Write("Repeating elements are ");
        Console.Write(x + " " + y);
    }
 
    static int fact(int n)
    {
        return (n == 0) ? 1 : n * fact(n - 1);
    }
 
    // driver code
    public static void Main()
    {
        int[] arr = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.Length;
 
        printRepeating(arr, arr_size);
    }
}
// This code is contributed by Sam007




<?php
 
/* function to get factorial of n */
function fact($n){
   
return ($n == 0)? 1 : $n*fact($n-1);
}
 
function printRepeating($arr, $size)
{
 $S = 0; /* S is for sum of elements in arr[] */
 $P = 1; /* P is for product of elements in arr[] */
 $x; $y; /* x and y are two repeating elements */
 $D;     /* D is for difference of x and y, i.e., x-y*/
 $n = $size - 2;
  
 
/* Calculate Sum and Product of all elements in arr[] */
for($i = 0; $i < $size; $i++)
{
    $S = $S + $arr[$i];
    $P = $P*$arr[$i];
}    
 
$S = $S - $n*($n+1)/2; /* S is x + y now */
$P = $P/fact($n);         /* P is x*y now */
 
$D = sqrt($S*$S - 4*$P); /* D is x - y now */
 
$x = ($D + $S)/2;
$y = ($S - $D)/2;
 
echo "Repeating elements are ".$x." ".$y;
}    
 
 
 
$arr = array(4, 2, 4, 5, 2, 3, 1);
$arr_size = count($arr);
printRepeating($arr, $arr_size);
?>




<script>
 
    function printRepeating(arr , size)
    {
        /* S is for sum of elements in arr */
        var S = 0;
         
        /* P is for product of elements in arr */
        var P = 1;
         
        /* x and y are two repeating elements */
        var x, y;
         
        /* D is for difference of x and y, i.e., x-y*/
        var D;
         
        var n = size - 2, i;
 
        /* Calculate Sum and Product of all elements in arr */
        for (i = 0; i < size; i++)
        {
            S = S + arr[i];
            P = P * arr[i];
        }
 
        /* S is x + y now */
        S = S - n * parseInt((n + 1) / 2);
         
        /* P is x*y now */
        P = parseInt(P / fact(n));
        
        /* D is x - y now */
        D = parseInt( Math.sqrt(S * S - 4 * P));
         
 
        x = parseInt((D + S) / 2);
        y = parseInt((S - D) / 2);
 
        document.write("Repeating elements are " + x + " " + y);
    }
 
    function fact(n)
    {    var ans = false;
        if(n == 0)
            return 1;
        else
            return(n * fact(n - 1));
    }
 
     
    var arr = [4, 2, 4, 5, 2, 3, 1];
    var arr_size = arr.length;
    printRepeating(arr, arr_size);
 
// This code is contributed by 29AjayKumar
 
</script>

Output
Repeating elements are 4 2

Time Complexity: O(N), Traversing over the array of size N to find the sum and product of the array 
Auxiliary Space: O(1) 

Find the two repeating elements in a given array using XOR: 

The idea is to use find the XOR of the repeating elements and then find the repeating elements.

Follow the steps below to solve the problem:

Below is the implementation of the above approach:




#include <bits/stdc++.h>
using namespace std;
 
void printRepeating(int arr[], int size)
{
    int Xor = arr[0]; /* Will hold Xor of all elements */
    int set_bit_no; /* Will have only single set bit of Xor
                     */
    int i;
    int n = size - 2;
    int x = 0, y = 0;
 
    /* Get the Xor of all elements in arr[] and {1, 2 .. n}
     */
    for (i = 1; i < size; i++)
        Xor ^= arr[i];
    for (i = 1; i <= n; i++)
        Xor ^= i;
 
    /* Get the rightmost set bit in set_bit_no */
    set_bit_no = Xor & ~(Xor - 1);
 
    /* Now divide elements in two sets by comparing
    rightmost set bit of Xor with bit at same position in
    each element. */
    for (i = 0; i < size; i++) {
        if (arr[i] & set_bit_no)
            x = x ^ arr[i]; /*Xor of first set in arr[] */
        else
            y = y ^ arr[i]; /*Xor of second set in arr[] */
    }
    for (i = 1; i <= n; i++) {
        if (i & set_bit_no)
            x = x ^ i; /*Xor of first set in arr[] and {1,
                          2, ...n }*/
        else
            y = y ^ i; /*Xor of second set in arr[] and {1,
                          2, ...n } */
    }
 
    cout << "Repeating elements are " << y << " " << x;
}
 
// Driver code
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    printRepeating(arr, arr_size);
    return 0;
}
 
// This code is contributed by rathbhupendra




#include <stdio.h>
 
void printRepeating(int arr[], int size)
{
    int xor = arr[0]; /* Will hold xor of all elements */
    int set_bit_no; /* Will have only single set bit of xor
                     */
    int i;
    int n = size - 2;
    int x = 0, y = 0;
 
    /* Get the xor of all elements in arr[] and {1, 2 .. n}
     */
    for (i = 1; i < size; i++)
        xor ^= arr[i];
    for (i = 1; i <= n; i++)
        xor ^= i;
 
    /* Get the rightmost set bit in set_bit_no */
    set_bit_no = xor&~(xor-1);
 
    /* Now divide elements in two sets by comparing
     rightmost set bit of xor with bit at same position in
     each element. */
    for (i = 0; i < size; i++) {
        if (arr[i] & set_bit_no)
            x = x ^ arr[i]; /*XOR of first set in arr[] */
        else
            y = y ^ arr[i]; /*XOR of second set in arr[] */
    }
    for (i = 1; i <= n; i++) {
        if (i & set_bit_no)
            x = x ^ i; /*XOR of first set in arr[] and {1,
                          2, ...n }*/
        else
            y = y ^ i; /*XOR of second set in arr[] and {1,
                          2, ...n } */
    }
 
    printf("Repeating elements are %d %d ", y, x);
}
 
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    printRepeating(arr, arr_size);
    getchar();
    return 0;
}




import java.io.*;
 
class RepeatElement {
    void printRepeating(int arr[], int size)
    {
        /* Will hold xor of all elements */
        int xor = arr[0];
 
        /* Will have only single set bit of xor */
        int set_bit_no;
 
        int i;
        int n = size - 2;
        int x = 0, y = 0;
 
        /* Get the xor of all elements in arr[] and {1, 2 ..
         * n} */
        for (i = 1; i < size; i++)
            xor ^= arr[i];
        for (i = 1; i <= n; i++)
            xor ^= i;
 
        /* Get the rightmost set bit in set_bit_no */
        set_bit_no = (xor & ~(xor - 1));
 
        /* Now divide elements in two sets by comparing
           rightmost set bit of xor with bit at same
           position in each element. */
        for (i = 0; i < size; i++) {
            int a = arr[i] & set_bit_no;
            if (a != 0)
                x = x
                    ^ arr[i]; /*XOR of first set in arr[] */
            else
                y = y ^ arr[i]; /*XOR of second set in arr[]
                                 */
        }
        for (i = 1; i <= n; i++) {
            int a = i & set_bit_no;
            if (a != 0)
                x = x ^ i; /*XOR of first set in arr[] and
                              {1, 2, ...n }*/
            else
                y = y ^ i; /*XOR of second set in arr[] and
                              {1, 2, ...n } */
        }
 
        System.out.print("Repeating elements are ");
        System.out.println(y + " " + x);
    }
 
    /* Driver program to test the above function */
    public static void main(String[] args)
    {
        RepeatElement repeat = new RepeatElement();
        int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.length;
        repeat.printRepeating(arr, arr_size);
    }
}
 
// This code has been contributed by Mayank Jaiswal




# Python3 code to Find the
# two repeating elements
# in a given array
 
 
def printRepeating(arr, size):
 
    # Will hold xor
    # of all elements
    xor = arr[0]
    n = size - 2
    x = 0
    y = 0
 
    # Get the xor of all
    # elements in arr[]
    # and 1, 2 .. n
    for i in range(1, size):
        xor ^= arr[i]
    for i in range(1, n + 1):
        xor ^= i
 
    # Get the rightmost set
    # bit in set_bit_no
    set_bit_no = xor & ~(xor-1)
 
    # Now divide elements in two
    # sets by comparing rightmost
    # set bit of xor with bit at
    # same position in each element.
    for i in range(0, size):
 
        if(arr[i] & set_bit_no):
 
            # XOR of first
            # set in arr[]
            x = x ^ arr[i]
        else:
 
            # XOR of second
            # set in arr[]
            y = y ^ arr[i]
 
    for i in range(1, n + 1):
 
        if(i & set_bit_no):
 
            # XOR of first set
            # in arr[] and
            # 1, 2, ...n
            x = x ^ i
        else:
 
             # XOR of second set
             # in arr[] and
             # 1, 2, ...n
            y = y ^ i
 
    print("Repeating elements are", y, x)
 
 
# Driver code
arr = [4, 2, 4,
       5, 2, 3, 1]
arr_size = len(arr)
printRepeating(arr, arr_size)
 
# This code is contributed
# by Smitha




using System;
 
class GFG {
    static void printRepeating(int[] arr, int size)
    {
        /* Will hold xor of all elements */
        int xor = arr[0];
 
        /* Will have only single set bit of xor */
        int set_bit_no;
 
        int i;
        int n = size - 2;
        int x = 0, y = 0;
 
        /* Get the xor of all elements
         in arr[] and {1, 2 .. n} */
        for (i = 1; i < size; i++)
            xor ^= arr[i];
 
        for (i = 1; i <= n; i++)
            xor ^= i;
 
        /* Get the rightmost set bit in set_bit_no */
        set_bit_no = (xor & ~(xor - 1));
 
        /* Now divide elements in two sets by
         comparing rightmost set bit of xor with bit
         at same position in each element. */
        for (i = 0; i < size; i++) {
            int a = arr[i] & set_bit_no;
 
            if (a != 0)
                /* XOR of first set in arr[] */
                x = x ^ arr[i];
            else
                /* XOR of second set in arr[] */
                y = y ^ arr[i];
        }
        for (i = 1; i <= n; i++) {
            int a = i & set_bit_no;
 
            if (a != 0)
 
                /* XOR of first set in
                 arr[] and {1, 2, ...n }*/
                x = x ^ i;
            else
 
                /* XOR of second set in
                 arr[] and {1, 2, ...n } */
                y = y ^ i;
        }
 
        Console.Write("Repeating elements are ");
        Console.Write(y + " " + x);
    }
 
    /* Driver program to test the above function */
    public static void Main()
    {
        int[] arr = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.Length;
 
        printRepeating(arr, arr_size);
    }
}
 
// This code is contributed by Sam007




<?php
// PHP code to Find the
// two repeating elements
// in a given array
function printRepeating( $arr, $size)
{
    $xor = $arr[0]; /* Will hold xor of all elements */
    $set_bit_no; /* Will have only single set bit of xor */
    $i;
    $n = $size - 2;
    $x = 0; $y = 0;
     
    /* Get the xor of all elements in arr[] and {1, 2 .. n} */
    for($i = 1; $i < $size; $i++)
    $xor ^= $arr[$i];
    for($i = 1; $i <= $n; $i++)
    $xor ^= $i;
     
    /* Get the rightmost set bit in set_bit_no */
    $set_bit_no = $xor & ~($xor-1);
     
    /* Now divide elements in two sets by
    comparing rightmost set bit of xor with
    bit at same position in each element. */
    for($i = 0; $i < $size; $i++)
    {
        if($arr[$i] & $set_bit_no)
        $x = $x ^ $arr[$i]; /*XOR of first set in arr[] */
        else
        $y = $y ^ $arr[$i]; /*XOR of second set in arr[] */
         
    }
    for($i = 1; $i <= $n; $i++)
    {
        if($i & $set_bit_no)
        /*XOR of first set in arr[] and {1, 2, ...n }*/
        $x = $x ^ $i;
        else
        /*XOR of second set in arr[] and {1, 2, ...n } */
        $y = $y ^ $i;
         
    }
    echo "Repeating elements are ";
    echo $y. " ".$x;
     
}
 
$arr = array(4, 2, 4, 5, 2, 3, 1);
$arr_size = count($arr);
printRepeating($arr, $arr_size);
 
// This code has been contributed by Rajput-Ji
?>




<script>
 
function printRepeating( arr, size)
{
    let Xor = arr[0]; /* Will hold Xor of all elements */
    let set_bit_no; /* Will have only single set bit of Xor */
    let i;
    let n = size - 2;
    let x = 0, y = 0;
         
    /* Get the Xor of all elements in arr[] and {1, 2 .. n} */
    for(i = 1; i < size; i++)
        Xor ^= arr[i];
    for(i = 1; i <= n; i++)
        Xor ^= i;
     
    /* Get the rightmost set bit in set_bit_no */
    set_bit_no = Xor & ~(Xor-1);
     
    /* Now divide elements in two sets by comparing rightmost set
    bit of Xor with bit at same position in each element. */
    for(i = 0; i < size; i++)
    {
        if(arr[i] & set_bit_no)
        x = x ^ arr[i]; /*Xor of first set in arr[] */
        else
        y = y ^ arr[i]; /*Xor of second set in arr[] */
    }
    for(i = 1; i <= n; i++)
    {
        if(i & set_bit_no)
        x = x ^ i; /*Xor of first set in arr[] and {1, 2, ...n }*/
        else
        y = y ^ i; /*Xor of second set in arr[] and {1, 2, ...n } */
    }
         
    document.write("Repeating elements are "+y+" "+x);
}
    // driver code
    let arr = [4, 2, 4, 5, 2, 3, 1];
    let arr_size = arr.length;
    printRepeating(arr, arr_size);
     
    // This code is contributed by jana_sayantan.
</script>

Output
Repeating elements are 4 2

Time Complexity: O(N), Linear Traversals are performed over the array of size N.
Auxiliary Space: O(1) 

Find the two repeating elements in a given array using Array Elements as an Index:

The idea is to use the original array to mark the elements in the array by making them negative and when an index is found which is already marked then that index would be our possible answer.

Follow the steps below to solve the problem:

Below is the implementation of the above approach:




#include <bits/stdc++.h>
using namespace std;
 
void printRepeating(int arr[], int size)
{
    int i;
 
    cout << "Repeating elements are ";
 
    for (i = 0; i < size; i++) {
        if (arr[abs(arr[i])] > 0)
            arr[abs(arr[i])] = -arr[abs(arr[i])];
        else
            cout << abs(arr[i]) << " ";
    }
}
 
// Driver code
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    printRepeating(arr, arr_size);
    return 0;
}
 
// This code is contributed by rathbhupendra




#include <stdio.h>
#include <stdlib.h>
 
void printRepeating(int arr[], int size)
{
    int i;
 
    printf("Repeating elements are");
 
    for (i = 0; i < size; i++) {
        if (arr[abs(arr[i])] > 0)
            arr[abs(arr[i])] = -arr[abs(arr[i])];
        else
            printf(" %d", abs(arr[i]));
    }
}
 
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    printRepeating(arr, arr_size);
    getchar();
    return 0;
}




import java.io.*;
 
class RepeatElement {
    void printRepeating(int arr[], int size)
    {
        int i;
        System.out.print("Repeating elements are ");
 
        for (i = 0; i < size; i++) {
            int abs_val = Math.abs(arr[i]);
            if (arr[abs_val] > 0)
                arr[abs_val] = -arr[abs_val];
            else
                System.out.print(abs_val + " ");
        }
    }
 
    /* Driver program to test the above function */
    public static void main(String[] args)
    {
        RepeatElement repeat = new RepeatElement();
        int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.length;
        repeat.printRepeating(arr, arr_size);
    }
}
 
// This code has been contributed by Mayank Jaiswal




# Python3 code for Find the two repeating
# elements in a given array
 
 
def printRepeating(arr, size):
 
    print("Repeating elements are", end=" ")
 
    for i in range(0, size):
 
        if(arr[abs(arr[i])] > 0):
            arr[abs(arr[i])] = (-1) * arr[abs(arr[i])]
        else:
            print(abs(arr[i]), end=" ")
 
 
# Driver code
arr = [4, 2, 4, 5, 2, 3, 1]
arr_size = len(arr)
printRepeating(arr, arr_size)
 
 
# This code is contributed by Nikita Tiwari.




// C# code for Find the two repeating
// elements in a given array
using System;
 
class GFG {
    static void printRepeating(int[] arr, int size)
    {
        int i;
        Console.Write("Repeating elements are ");
 
        for (i = 0; i < size; i++) {
            int abs_val = Math.Abs(arr[i]);
            if (arr[abs_val] > 0)
                arr[abs_val] = -arr[abs_val];
            else
                Console.Write(abs_val + " ");
        }
    }
 
    /* Driver program to test the above function */
    public static void Main()
    {
        int[] arr = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.Length;
 
        printRepeating(arr, arr_size);
    }
}
 
// This code is contributed by Sam007




<?php
 
 
function  printRepeating($arr, $size)
{
    $i;
 
 echo "Repeating elements are"," ";
 
for($i = 0; $i < $size; $i++)
{
    if($arr[abs($arr[$i])] > 0)
    $arr[abs($arr[$i])] = -$arr[abs($arr[$i])];
    else
    echo  abs($arr[$i])," ";
}        
}    
 
 
    $arr = array (4, 2, 4, 5, 2, 3, 1);
    $arr_size = sizeof($arr);
    printRepeating($arr, $arr_size);
     
     
#This code is contributed by aj_36
?>




<script>
 
function printRepeating(arr , size)
{
    var i; 
    document.write("Repeating elements are ");
    
        for(i = 0; i < size; i++)
        {
            var abs_val = Math.abs(arr[i]);
            if(arr[abs_val] > 0)x
                arr[abs_val] = -arr[abs_val];
            else
                document.write(abs_val + " ");
    }        
}
 
/* Driver program to test the above function */
  
var arr = [4, 2, 4, 5, 2, 3, 1];
var arr_size = arr.length;
printRepeating(arr, arr_size);
 
// This code is contributed by 29AjayKumar
 
</script>

Output
Repeating elements are 4 2 

Time Complexity: O(N), Traversing over the array of size N. 
Auxiliary Space: O(1) 

Note: This method modifies the original array and may not be a recommended method if it’s not allowed to modify the array. 

Find the two repeating elements in a given array by Modifying Original Array:

The idea is to increment every element at (arr[i] – 1)th index by N-1 (as the elements are present up to N-2 only) 

Follow the steps below to solve the problem:

Below is the implementation of the above approach:




#include <bits/stdc++.h>
using namespace std;
 
void twoRepeated(int arr[], int N)
{
    int m = N - 1;
    for (int i = 0; i < N; i++) {
        arr[arr[i] % m - 1] += m;
        if ((arr[arr[i] % m - 1] / m) == 2)
            cout << arr[i] % m << " ";
    }
}
// Driver Code
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Repeating elements are ";
    twoRepeated(arr, n);
 
    return 0;
}
 
// This code is contributed by Aditya Kumar (adityakumar129)




#include <stdio.h>
 
void twoRepeated(int arr[], int N)
{
    int m = N - 1;
    for (int i = 0; i < N; i++) {
        arr[arr[i] % m - 1] += m;
        if ((arr[arr[i] % m - 1] / m) == 2)
            printf("%d ", arr[i] % m);
    }
}
// Driver Code
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    printf("Repeating elements are ");
    twoRepeated(arr, n);
 
    return 0;
}
 
// This code is contributed by Aditya Kumar (adityakumar129)




import java.io.*;
 
class GFG {
 
    public static void twoRepeated(int arr[], int N)
    {
        int m = N - 1;
        for (int i = 0; i < N; i++) {
            arr[arr[i] % m - 1] += m;
 
            if ((arr[arr[i] % m - 1] / m) == 2)
                System.out.print(arr[i] % m + " ");
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
        int n = 7;
        System.out.print("Repeating elements are ");
        twoRepeated(arr, n);
    }
}
 
// This code is contributed by Aditya Kumar (adityakumar129)




# Python program for the above approach
def twoRepeated(arr, N):
    m = N - 1
    for i in range(N):
        arr[arr[i] % m - 1] += m
        if ((arr[arr[i] % m - 1] // m) == 2):
            print(arr[i] % m, end=" ")
 
 
# Driver Code
arr = [4, 2, 4, 5, 2, 3, 1]
n = len(arr)
print("Repeating elements are ", end="")
twoRepeated(arr, n)
 
# This code is contributed by Shubham Singh




// C# program for the above approach
using System;
 
public class GFG {
    public static void twoRepeated(int[] arr, int N)
    {
        int m = N - 1;
        for (int i = 0; i < N; i++) {
            arr[arr[i] % m - 1] += m;
 
            if ((arr[arr[i] % m - 1] / m) == 2)
                Console.Write(arr[i] % m + " ");
        }
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int[] arr = { 4, 2, 4, 5, 2, 3, 1 };
        int n = 7;
 
        Console.Write("Repeating elements are ");
 
        twoRepeated(arr, n);
    }
}
 
// This code is contributed by splevel62.




<script>
 
function twoRepeated(arr, N)
{
    let m = N - 1;
    for(let i = 0; i < N; i++)
    {
        arr[parseInt(arr[i] % m) - 1] += m;
        if (parseInt(arr[parseInt(arr[i] % m) - 1] / m) == 2)
            document.write(parseInt(arr[i] % m) + " ");
    }
}
 
// Driver Code
var arr = [ 4, 2, 4, 5, 2, 3, 1 ];
var n = 7;
document.write("Repeating elements are ");
 
twoRepeated(arr, n);
 
// This code is contributed by Potta Lokesh
 
</script>

Output
Repeating elements are 4 2 

Time Complexity: O(N), Traversing over the array of size N. 
Auxiliary Space: O(1) 

Find the two repeating elements in a given array using Hash Set:

The idea is to use a set, insert the elements in the set, and check simultaneously whether that is already present the set or not.

Follow the steps below to solve the problem:

Below is the implementation of the above approach:




// C++ program to Find the two repeating
// elements in a given array
#include <bits/stdc++.h>
using namespace std;
 
void printRepeating(int arr[], int size)
{
    unordered_set<int> s;
    cout << "Repeating elements are ";
    for (int i = 0; i < size; i++) {
        if (s.empty() == false && s.find(arr[i]) != s.end())
            cout << arr[i] << "  ";
        s.insert(arr[i]);
    }
}
 
// Driver code
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    printRepeating(arr, arr_size);
    return 0;
}
 
// This code is contributed by nakul amate




// Java program to Find the two repeating
// elements in a given array
import java.util.*;
class GFG {
 
    static void printRepeating(int arr[], int size)
    {
        HashSet<Integer> s = new HashSet<>();
        System.out.print("Repeating elements are ");
        for (int i = 0; i < size; i++) {
            if (!s.isEmpty() && s.contains(arr[i]))
                System.out.print(arr[i] + "  ");
            s.add(arr[i]);
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.length;
        printRepeating(arr, arr_size);
    }
}
 
// This code is contributed by Rajput-Ji




# Python3 program to find the two repeating
# elements in a given array
 
 
def printRepeating(arr, size):
 
    s = set()
    print("Repeating elements are ", end="")
 
    for i in range(size):
        if (len(s) and arr[i] in s):
            print(arr[i], end="  ")
 
        s.add(arr[i])
 
 
# Driver code
arr = [4, 2, 4, 5, 2, 3, 1]
arr_size = len(arr)
printRepeating(arr, arr_size)
 
# This code is contributed by Shubham Singh




// C# program to Find the two repeating
// elements in a given array
using System;
using System.Collections.Generic;
 
public class GFG {
 
    static void printRepeating(int[] arr, int size)
    {
        HashSet<int> s = new HashSet<int>();
        Console.Write("Repeating elements are ");
        for (int i = 0; i < size; i++) {
            if (s.Count != 0 && s.Contains(arr[i]))
                Console.Write(arr[i] + "  ");
            s.Add(arr[i]);
        }
    }
 
    // Driver code
    public static void Main()
    {
        int[] arr = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.Length;
        printRepeating(arr, arr_size);
    }
}
 
// This code is contributed by Shubham Singh




<script>
 
function printRepeating(arr, size)
{
    const s = new Set();
    document.write("Repeating elements are ");
    for(let i = 0; i < size; i++)
    {
      if(s.size != 0 && s.has(arr[i]))
        document.write(arr[i] + " ");
      s.add(arr[i]);
             
    }
}
 
// Driver Code
var arr = [ 4, 2, 4, 5, 2, 3, 1 ];
var arr_size = 7;
printRepeating(arr, arr_size);
 
// This code is contributed by Shubham Singh
 
</script>

Output
Repeating elements are 4  2  

Time Complexity: O(N), Traversing over the array of size N.  
Auxiliary Space: O(N), Space used to store the elements in the hash set

Find the two repeating elements in a given array using Sorting:

The idea is to sort the given array and then traverse it. While traversing find if two consecutive elements are equal then that is the repeating element.

Code-




// C++ program to Find the two repeating
// elements in a given array
#include <bits/stdc++.h>
using namespace std;
 
void printRepeating(int arr[], int size)
{
    sort(arr,arr+size);
    cout << "Repeating elements are ";
    for (int i = 0; i < size-1; i++) {
        if (arr[i]==arr[i+1]){
             cout << arr[i] << "  ";
        }
    }
}
 
// Driver code
int main()
{
    int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
    int arr_size = sizeof(arr) / sizeof(arr[0]);
    printRepeating(arr, arr_size);
    return 0;
}




// Java program to Find the two repeating
// elements in a given array
import java.util.Arrays;
 
public class Main {
    static void printRepeating(int arr[], int size) {
        Arrays.sort(arr);
        System.out.print("Repeating elements are ");
        for (int i = 0; i < size-1; i++) {
            if (arr[i] == arr[i+1]) {
                System.out.print(arr[i] + " ");
            }
        }
    }
 
    // Driver code
    public static void main(String[] args) {
        int arr[] = { 4, 2, 4, 5, 2, 3, 1 };
        int arr_size = arr.length;
        printRepeating(arr, arr_size);
    }
}
 
// This code is contributed by Prajwal Kandekar




# Function to print the repeating elements in an array
def printRepeating(arr):
    arr.sort()
    print("Repeating elements are ", end="")
    for i in range(len(arr) - 1):
        if arr[i] == arr[i + 1]:
            print(arr[i], end=" ")
 
 
# Driver code
if __name__ == "__main__":
    arr = [4, 2, 4, 5, 2, 3, 1]
    printRepeating(arr)




// JavaScript program to Find the two repeating
// elements in a given array
 
function printRepeating(arr) {
  
 // Sorting the arary
  arr.sort();
  process.stdout.write("Repeating elements are ");
  for (let i = 0; i < arr.length - 1; i++) {
    if (arr[i] == arr[i + 1]) {
    // Printing the answer
      process.stdout.write(arr[i] + " ");
    }
  }
}
 
// Driver code
let arr = [4, 2, 4, 5, 2, 3, 1];
printRepeating(arr);




using System;
using System.Linq;
 
class Program
{
    static void PrintRepeating(int[] arr, int size)
    {
        Array.Sort(arr);
        Console.Write("Repeating elements are ");
        for (int i = 0; i < size - 1; i++)
        {
            if (arr[i] == arr[i + 1])
            {
                Console.Write(arr[i] + " ");
            }
        }
    }
 
    static void Main(string[] args)
    {
        int[] arr = { 4, 2, 4, 5, 2, 3, 1 };
        int arrSize = arr.Length;
        PrintRepeating(arr, arrSize);
    }
}

Output
Repeating elements are 2  4  

Time Complexity: O(NlogN), because of sorting  
Auxiliary Space: O(1)

Please write comments if you find the above codes/algorithms incorrect, or find better ways to solve the same problem.


Article Tags :