Count pairs from two arrays having sum equal to K
Given an integer K and two arrays A1 and A2, the task is to return the total number of pairs (one element from A1 and one element from A2) with a sum equal to K.
Note: Arrays can have duplicate elements. We consider every pair as different, the only constraint is, an element (of any array) can participate only in one pair. For example, A1[] = {3, 3}, A2[] = {4, 4} and K = 7, we consider only two pairs (3, 4) and (3, 4)
Examples:
Input: A1[] = {1, 1, 3, 4, 5, 6, 6}, A2[] = {1, 4, 4, 5, 7}, K = 10
Output: 4
All possible pairs are {3, 7}, {4, 6}, {5, 5} and {4, 6}
Input: A1[] = {1, 10, 13, 15}, A2[] = {3, 3, 12, 4}, K = 13
Output: 2
Approach:
- Create a map of the elements of array A1.
- For each element in array A2, check if temp = K – A2[i] exists in map created in previous step.
- If map[temp] > 0 then increment result by 1 and decrement map[temp] by 1.
- Print the total count in the end.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int countPairs( int A1[], int A2[]
, int n1, int n2, int K)
{
int res = 0;
unordered_map< int , int > m;
for ( int i = 0; i < n1; ++i)
m[A1[i]]++;
for ( int i = 0; i < n2; ++i) {
int temp = K - A2[i];
if (m[temp] != 0) {
res++;
m[temp]--;
}
}
return res;
}
int main()
{
int A1[] = { 1, 1, 3, 4, 5, 6, 6 };
int A2[] = { 1, 4, 4, 5, 7 }, K = 10;
int n1 = sizeof (A1) / sizeof (A1[0]);
int n2 = sizeof (A2) / sizeof (A2[0]);
cout << countPairs(A1, A2, n1, n2, K);
return 0;
}
|
Java
import java.util.*;
class GfG {
static int countPairs( int A1[], int A2[] , int n1, int n2, int K)
{
int res = 0 ;
Map<Integer, Integer> m = new HashMap<Integer, Integer> ();
for ( int i = 0 ; i < n1; ++i)
{
if (m.containsKey(A1[i]))
m.put(A1[i], m.get(A1[i]) + 1 );
else
m.put(A1[i], 1 );
}
for ( int i = 0 ; i < n2; ++i) {
int temp = K - A2[i];
if (m.containsKey(temp) && m.get(temp) != 0 ) {
res++;
m.put(temp, m.get(A1[i]) - 1 );
}
}
return res;
}
public static void main(String[] args)
{
int A1[] = { 1 , 1 , 3 , 4 , 5 , 6 , 6 };
int A2[] = { 1 , 4 , 4 , 5 , 7 }, K = 10 ;
int n1 = A1.length;
int n2 = A2.length;
System.out.println(countPairs(A1, A2, n1, n2, K));
}
}
|
Python3
def countPairs(A1, A2, n1, n2, K):
res = 0
m = dict ()
for i in range ( 0 , n1):
if A1[i] not in m.keys():
m[A1[i]] = 1
else :
m[A1[i]] = m[A1[i]] + 1
for i in range ( 0 , n2):
temp = K - A2[i]
if temp in m.keys():
res = res + 1
m[temp] = m[temp] - 1
return res
A1 = [ 1 , 1 , 3 , 4 , 5 , 6 , 6 ]
A2 = [ 1 , 4 , 4 , 5 , 7 ]
K = 10
n1 = len (A1)
n2 = len (A2)
print (countPairs(A1, A2, n1, n2, K))
|
C#
using System;
using System.Collections.Generic;
class GfG
{
static int countPairs( int []A1, int []A2 ,
int n1, int n2, int K)
{
int res = 0;
Dictionary< int , int > m = new Dictionary< int , int > ();
for ( int i = 0; i < n1; ++i)
{
int a;
if (m.ContainsKey(A1[i]))
{
a = m[A1[i]] + 1;
m.Remove(A1[i]);
m.Add(A1[i], a);
}
else
m.Add(A1[i], 1);
}
for ( int i = 0; i < n2; ++i)
{
int temp = K - A2[i];
if (m.ContainsKey(temp) && m[temp] != 0)
{
res++;
m.Remove(temp);
m.Add(temp, m[A1[i]] - 1);
}
}
return res;
}
public static void Main()
{
int []A1 = { 1, 1, 3, 4, 5, 6, 6 };
int []A2 = { 1, 4, 4, 5, 7 };
int K = 10;
int n1 = A1.Length;
int n2 = A2.Length;
Console.WriteLine(countPairs(A1, A2, n1, n2, K));
}
}
|
Javascript
<script>
function countPairs(A1, A2, n1, n2, K)
{
let res = 0;
let m = new Map();
for (let i = 0; i < n1; ++i){
if (m.has(A1[i])){
m.set(A1[i],m.get(A1[i])+1);
}
else m.set(A1[i],1);
}
for (let i = 0; i < n2; ++i) {
let temp = K - A2[i];
if (m.has(temp)) {
res++;
m.set(temp,m.get(temp)-1);
}
}
return res;
}
let A1 = [ 1, 1, 3, 4, 5, 6, 6 ];
let A2 = [ 1, 4, 4, 5, 7 ], K = 10;
let n1 = A1.length;
let n2 = A2.length;
document.write(countPairs(A1, A2, n1, n2, K));
</script>
|
Time Complexity: O(N+M), since two loops are running. One for N times and the other for M times.
Auxiliary Space: O(N+M)
Last Updated :
25 Jul, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...