Count pairs from two arrays having sum equal to K in C++


We are given two arrays Arr1[] and Arr2[] and a number K. The goal is to find unique pairs of elements of both arrays such that their sum is K. Pairs will be of form ( Arr1[i], Arr2[j] ) where Arr1[i]+Arr2[j]==K.

We will traverse using two loops for i and j. If sum (Arr1[i]+Arr2[j])==K. And the pair doesn’t exist in unordered_map<int,int>. Add it to the map and increment count.

Let’s understand with examples.

Input 

Arr1[]={ 1,3,2,4,3,2 }; Arr2[]={ 0,2,1,2,3 }; K=4

Output 

Number of pairs with sum K : 4

Explanation 

Pairs will be
( Arr1[0], Arr2[4] ) → (1,3)
( Arr1[1], Arr2[2] ) → (3,1)
( Arr1[2], Arr2[1] ) → (2,2)
( Arr1[3], Arr2[2] ) → (3,1)
All other pairs already exist.Total unique pairs 4.

Input 

Arr1[]={ 0,2,1,2,3}; Arr2[]={ 1,1,1,1,1 }; K=3

Output 

Number of pairs with sum K : 1

Explanation 

Pairs will be
( Arr1[1], Arr2[0] ) → (2,1)
All other pairs already exist.Total unique pairs 1.

Approach used in the below program is as follows

  • We take two arrays Arr1[] and Arr2[] and a variable K for sum.

  • Len1 and Len2 are used to denote the length of both arrays.

  • Function pairsumisK(int arr1[],int arr2[],int k,int l1,int l2) takes all variables and returns the count of unique pairs of elements from both arrays with sum=k.

  • Take the initial variable count as 0 for pairs.

  • Take unordered_map umap to store unique pairs.

  • Traverse both arrays using two for loops.

  • For elements in arr1[] from i=0 to i<len1. For elements in arr2[] from j=0 to j<len2.

  • Check if sum arr1[i]+arr2[j]=k. If yes, check if this pair exists through umap.find(....)==umap.end().

  • If it doesn’t add this pair to umap and increment count.

  • At the end of all loops count will have a total number of such pairs.

  • Return the count as result.

Example

 Live Demo

#include <bits/stdc++.h>
using namespace std;
int pairsumisK(int arr1[],int arr2[],int k,int l1,int l2){
   int count = 0;
   unordered_map<int, int> umap;
   for (int i = 0; i < l1; i++){
      for (int j = 0; j < l2; j++){
         int sum=arr1[i]+arr2[j];
         if(sum==k) //pairs with sum=k only{
            if(umap.find(arr1[i]) == umap.end()) //unique pairs only{
               umap.insert(make_pair(arr1[i],arr2[j]));
            }
         }
      }
   }
   return count;
}
int main(){
   int Arr1[]={ 1,2,3,0,2,4 };
   int Arr2[]={ 3,2,5,2 };
   int len1=sizeof(Arr1)/sizeof(Arr1[0]);
   int len2=sizeof(Arr2)/sizeof(Arr2[0]);
   int K=5; //length of array
   cout <<endl<< "Number of pairs with sum K : "<<pairsumisK(Arr1,Arr2,K,len1,len2);
   return 0;
}

Output

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

Number of pairs with sum K : 0

Updated on: 31-Oct-2020

206 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements