Find the two repeating elements in a given array
Find the two repeating
elements in a given array
You are given an
array of n+2 elements. All elements of the array are in range 1 to n. And all
elements occur once except two numbers which occur twice. Find the two
repeating numbers.
Method 1 (Basic)
#include<stdio.h>
#include<stdlib.h>
void printRepeating(int arr[], int size)
{
  int i, j;
  printf("
Repeating elements are ");
  for(i = 0; i
< size; 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;
}
Output :
Repeating elements are 4 2
Method 2 (Use Count
array)
#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;
}
Output :
Repeating elements are 4 2
Method 3 (Make two
equations)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
/* 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;
 
printf("The two Repeating elements are %d & %d", x, y);
}     
 int fact(int n)
{
   return (n ==
0)? 1 : n*fact(n-1);
}    
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;
}
Output :
Repeating elements are 4 2
Method 4 (Use XOR)
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("n
The two repeating elements are %d & %d ", x, y);
}     
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;
}
Output :
The two repeating elements
are 4 2
Method 5 (Use array
elements as index)
#include <stdio.h>
#include <stdlib.h>
void printRepeating(int arr[], int size)
{
  int i;  
  printf("n
The 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;
}
Output :
The repeating elements are
4 2
Example:
array = {4, 2, 4, 5, 2, 3, 1} and n = 5
Find the two repeating elements in a given array
 Reviewed by Unknown
        on 
        
August 25, 2018
 
        Rating:
 
        Reviewed by Unknown
        on 
        
August 25, 2018
 
        Rating: 
No comments:
If you have any doubt or query ,comment below: