Find the repeating and the missing number using two equations
Last Updated :
23 Jun, 2022
Given an array arr[] of size N, each integer from the range [1, N] appears exactly once except A which appears twice and B which is missing. The task is to find the numbers A and B.
Examples:
Input: arr[] = {1, 2, 2, 3, 4}
Output:
A = 2
B = 5
Input: arr[] = {5, 3, 4, 1, 1}
Output:
A = 1
B = 2
Approach: From the sum of first N natural numbers,
SumN = 1 + 2 + 3 + … + N = (N * (N + 1)) / 2
And, let the sum of all the array elements be Sum. Now,
SumN = Sum – A + B
A – B = Sum – SumN …(equation 1)
And from the sum of the squares of first N natural numbers,
SumSqN = 12 + 22 + 32 + … + N2 = (N * (N + 1) * (2 * n + 1)) / 6
And, let the sum of the squares of all the array elements be SumSq. Now,
SumSq = SumSqN + A2 – B2
SumSq – SumSqN = (A + B) * (A – B) …(equation 2)
Put value of (A – B) from equation 1 in equation 2,
SumSq – SumSqN = (A + B) * (Sum – SumN)
A + B = (SumSq – SumSqN) / (Sum – SumN) …(equation 3)
Solving equation 1 and equation 3 will give,
B = (((SumSq – SumSqN) / (Sum – SumN)) + SumN – Sum) / 2
And, A = Sum – SumN + B
Below is the implementation of the above approach:
C++
#include <cmath>
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
void findNumbers( int arr[], int n)
{
int sumN = (n * (n + 1)) / 2;
int sumSqN = (n * (n + 1) * (2 * n + 1)) / 6;
int sum = 0, sumSq = 0, i;
for (i = 0; i < n; i++) {
sum += arr[i];
sumSq = sumSq + ( pow (arr[i], 2));
}
int B = (((sumSq - sumSqN) / (sum - sumN)) + sumN - sum) / 2;
int A = sum - sumN + B;
cout << "A = " ;
cout << A << endl;
cout << "B = " ;
cout << B << endl;
}
int main() {
int arr[] = { 1, 2, 2, 3, 4 };
int n = sizeof (arr)/ sizeof (arr[0]);
findNumbers(arr, n);
return 0;
}
|
Java
public class GFG {
static void findNumbers( int arr[], int n)
{
int sumN = (n * (n + 1 )) / 2 ;
int sumSqN = (n * (n + 1 ) * ( 2 * n + 1 )) / 6 ;
int sum = 0 , sumSq = 0 , i;
for (i = 0 ; i < n; i++) {
sum += arr[i];
sumSq += Math.pow(arr[i], 2 );
}
int B = (((sumSq - sumSqN) / (sum - sumN)) + sumN - sum) / 2 ;
int A = sum - sumN + B;
System.out.println( "A = " + A + "\nB = " + B);
}
public static void main(String[] args)
{
int arr[] = { 1 , 2 , 2 , 3 , 4 };
int n = arr.length;
findNumbers(arr, n);
}
}
|
Python3
import math
def findNumbers(arr, n):
sumN = (n * (n + 1 )) / 2 ;
sumSqN = (n * (n + 1 ) * ( 2 * n + 1 )) / 6 ;
sum = 0 ;
sumSq = 0 ;
for i in range ( 0 ,n):
sum = sum + arr[i];
sumSq = sumSq + (math. pow (arr[i], 2 ));
B = (((sumSq - sumSqN) / ( sum - sumN)) + sumN - sum ) / 2 ;
A = sum - sumN + B;
print ( "A = " , int (A)) ;
print ( "B = " , int (B));
arr = [ 1 , 2 , 2 , 3 , 4 ];
n = len (arr);
findNumbers(arr, n);
|
C#
using System;
public class GFG {
static void findNumbers( int []arr, int n)
{
int sumN = (n * (n + 1)) / 2;
int sumSqN = (n * (n + 1) * (2 * n + 1)) / 6;
int sum = 0, sumSq = 0, i;
for (i = 0; i < n; i++) {
sum += arr[i];
sumSq += ( int )Math.Pow(arr[i], 2);
}
int B = (((sumSq - sumSqN) / (sum - sumN)) + sumN - sum) / 2;
int A = sum - sumN + B;
Console.WriteLine( "A = " + A + "\nB = " + B);
}
public static void Main()
{
int []arr = { 1, 2, 2, 3, 4 };
int n = arr.Length;
findNumbers(arr, n);
}
}
|
PHP
<?php
function findNumbers( $arr , $n )
{
$sumN = ( $n * ( $n + 1)) / 2;
$sumSqN = ( $n * ( $n + 1) *
(2 * $n + 1)) / 6;
$sum = 0 ;
$sumSq = 0 ;
for ( $i = 0; $i < $n ; $i ++)
{
$sum += $arr [ $i ];
$sumSq += pow( $arr [ $i ], 2);
}
$B = ((( $sumSq - $sumSqN ) / ( $sum - $sumN )) +
$sumN - $sum ) / 2;
$A = $sum - $sumN + $B ;
echo "A = " , $A , "\nB = " , $B ;
}
$arr = array ( 1, 2, 2, 3, 4 );
$n = sizeof( $arr ) ;
findNumbers( $arr , $n );
?>
|
Javascript
<script>
function findNumbers(arr, n)
{
sumN = (n * (n + 1)) / 2;
sumSqN = (n * (n + 1) *
(2 * n + 1)) / 6;
let sum = 0 ;
let sumSq = 0 ;
for (let i = 0;i < n; i++)
{
sum += arr[i];
sumSq += Math.pow(arr[i], 2);
}
B = (((sumSq - sumSqN) / (sum - sumN)) +
sumN - sum) / 2;
A = sum - sumN + B;
document.write( "A = " + A, "<br>B = " , B);
}
let arr = [ 1, 2, 2, 3, 4 ];
n = arr.length ;
findNumbers(arr, n);
</script>
|
Time Complexity: O(N), since the loop runs from 0 to (n – 1).
Auxiliary Space: O(1), since no extra space has been taken.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...