added new file in algorithm-cplusplus-arrays folder named repeat-and-missing-number

pull/878/head
tanishagarg1803 2022-10-02 10:57:54 +05:30
parent 62907b69ec
commit 4529e15520
1 changed files with 72 additions and 0 deletions

View File

@ -0,0 +1,72 @@
/* Problem Statement: You are given a read-only array of N
integers with values also in the range [1, N] both inclusive.
Each integer appears exactly once except A which appears twice and B which is missing.
The task is to find the repeating and missing numbers A and B where A repeats twice and B is missing.
Example 1:
Input Format: array[] = {3,1,2,5,3}
Result: {3,4)
Explanation: A = 3 , B = 4
Since 3 is appearing twice and 4 is missing
Example 2:
Input Format: array[] = {3,1,2,5,4,6,7,5}
Result: {5,8)
Explanation: A = 5 , B = 8
Since 5 is appearing twice and 8 is missing
Approach:
Since the numbers are from 1 to N in the array arr[]
Take a substitute array of size N+1 and initalize it with 0.
Traverse the given array and increase the value of substitute[arr[i]] by one .
Then again traverse the substitute array starting from index 1 to N.
If you find any index value greater than 1 that is repeating element A.
If you find any index value = 0 then that is the missing element B.
*/
#include <bits/stdc++.h>
using namespace std;
void find_dup_miss(int a[], int n)
{
int miss, dup;
int temp[n + 1] = {0};
for (int i = 0; i < n; i++)
{
temp[a[i]] += 1;
}
for (int i = 1; i <= n; i++)
{
if (temp[i] == 0)
{
miss = i;
}
if (temp[i] > 1)
{
dup = i;
}
}
cout << "duplicate element is " << dup << " and missing number is " << miss;
}
int main()
{
cout << "enter the value of n: ";
int n;
cin >> n;
cout << "enter the array: ";
int a[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
find_dup_miss(a, n);
return 0;
}