Count pairs from two sorted arrays whose sum is equal to a given value x in C++

C++Server Side ProgrammingProgramming

We are given two arrays containing positive numbers and a value x. The goal is to find pairs of elements of arrays such that pairs of type (A, B) has A+B=x and A belongs to the first array and B belongs to the second array.

Let us understand with examples

Input − arr_1[] = {1,2,5,3,4}; arr_2[] = {7,0,1,3}; x=6

Output −Count of pairs from two sorted arrays whose sum is equal to a given value x are − 2

Explanation − The pairs are (5,1) - (arr_1[2],arr_2[2]) and (3,3) - (arr_1[3],arr_2[3])

Input − arr_1[] = {1,1,1}; arr_2[] = {2,2}; x=6

Output − Count of pairs from two sorted arrays whose sum is equal to a given value x are − 2

Explanation − The pairs are (1,2) - (arr_1[0],arr_2[0]) and (1,2) - (arr_1[1],arr_2[1])

Approach used in the below program is as follows

We will use two approaches. First naive approach using a for loop. Start traversing both using for loops such that index i is for arr_1[] and index j is for arr_2[]. For pair (arr_1[i]+arr_2[j]==x), increment count. Return count as result.

  • Take an integer arrays arr_1[] and arr_2[] with positive elements and lengths as size_arr_1 and size_arr_2.

  • Function Pair_value_x(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int x) takes both arrays and their lengths and returns the pairs such that the sum of elements is x.

  • Take the initial value of count as 0.

  • Start traversing arr_1[] from i=0 to i<size_arr_1 and arr_2[] from j=0 to j

  • For each pair arr_1[i], arr_2[j], check if sum is x. If true, increment count.

  • Return count as result.

Efficient Approach

In this approach we will create an unordered_set of elements of arr_1. Now traverse arr_2 using for loop and for each value arr_2[i], if x-arr_2[i] is found in the set then increment count. Return count at the end.

  • Take the same arrays and their sizes.

  • Function Pair_value_x(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int x) takes both arrays and their lengths and returns the pairs such that the sum of elements is x.

  • Take the initial count as 0.

  • Create unordered_set<int> hash_map for storing unique elements of arr_1.

  • Populate hash_map with elements of arr_1 using for loop.

  • Now traverse arr_2[] using for loop.

  • For each arr-2[j], if x-arr_2[j] is found in hash_map using (hash_map.find(x - arr_2[j]) != hash_map.end()), then increment count.

  • At the end count as pairs with sum equals x.

  • Return count as result.

Example (naive approach)

 Live Demo

#include <bits/stdc++.h>
using namespace std;
int Pair_value_x(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int x){
   int count = 0;
   for (int i = 0; i < size_arr_1; i++){
      for (int j = 0; j < size_arr_2; j++){
         if ((arr_1[i] + arr_2[j]) == x){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr_1[] = {1, 2, 3, 4};
   int arr_2[] = {2, 3, 4, 5};
   int size_arr_1 = sizeof(arr_1) / sizeof(arr_1[0]);
   int size_arr_2 = sizeof(arr_2) / sizeof(arr_2[0]);
   int x = 6;
   cout<<"Count of pairs from two sorted arrays whose sum is equal to a given value x are: "<<
Pair_value_x(arr_1, arr_2, size_arr_1 , size_arr_2, x);
   return 0;
}

Output

If we run the above code it will generate the following output −

Count of pairs from two sorted arrays whose sum is equal to a given value x are: 4

Example (Efficient Approach)

 Live Demo

#include <bits/stdc++.h>
using namespace std;
int Pair_value_x(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int x){
   int count = 0;
   unordered_set<int> hash_map;
   for (int i = 0; i < size_arr_1; i++){
      hash_map.insert(arr_1[i]);
   }
   for (int j = 0; j < size_arr_2; j++){
      if (hash_map.find(x - arr_2[j]) != hash_map.end()){
         count++;
      }
   }
   return count;
}
int main(){
   int arr_1[] = {1, 2, 3, 4};
   int arr_2[] = {2, 3, 4, 5};
   int size_arr_1 = sizeof(arr_1) / sizeof(arr_1[0]);
   int size_arr_2 = sizeof(arr_2) / sizeof(arr_2[0]);
   int x = 6;
   cout<<"Count of pairs from two sorted arrays whose sum is equal to a given value x are: "<< Pair_value_x(arr_1, arr_2, size_arr_1 , size_arr_2, x);
   return 0;
}

Output

If we run the above code it will generate the following output −

Count of pairs from two sorted arrays whose sum is equal to a given value x are: 4
raja
Published on 02-Dec-2020 11:44:48
Advertisements