diff --git a/algorithms/CPlusPlus/Arrays/repeat-and-missing-number.cpp b/algorithms/CPlusPlus/Arrays/repeat-and-missing-number.cpp new file mode 100644 index 00000000..8d8c5aa8 --- /dev/null +++ b/algorithms/CPlusPlus/Arrays/repeat-and-missing-number.cpp @@ -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 +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; +} \ No newline at end of file