# Given two unsorted arrays, find all pairs whose sum is x

Given two unsorted arrays of distinct elements, the task is to find all pairs from both arrays whose sum is equal to x.

Examples:

```Input :  arr1[] = {-1, -2, 4, -6, 5, 7}
arr2[] = {6, 3, 4, 0}
x = 8
Output : 4 4
5 3

Input : arr1[] = {1, 2, 4, 5, 7}
arr2[] = {5, 6, 3, 4, 8}
x = 9
Output : 1 8
4 5
5 4
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

A Naive approach is to simply run two loops and pick elements from both arrays. One by one check that both elements sum is equal to given value x or not.

```// C++ program to find all pairs in both arrays
// whose sum is equal to given value x
#include<bits/stdc++.h>
using namespace std;

// Function to print all pairs in both arrays
// whose sum is equal to given value x
void findPairs(int arr1[], int arr2[], int n,
int m, int x)
{
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
if (arr1[i] + arr2[j] == x)
cout << arr1[i] << " "
<< arr2[j] << endl;
}

// Driver code
int main()
{
int arr1[] = {1, 2, 3, 7, 5, 4};
int arr2[] = {0, 7, 4, 3, 2, 1};
int n = sizeof(arr1)/sizeof(int);
int m = sizeof(arr2)/sizeof(int);
int x = 8;
findPairs(arr1, arr2, n, m, x);
return 0;
}
```

Output:

```1 7
7 1
5 3
4 4
```

Time Complexity : O(n^2)
Auxiliary Space : O(1)

An Efficient solution of this problem is to hashing. Hash table is implemented using unordered_set in C++. We store all first array elements in hash table. For elements of second array, we subtract every element from x and check the result in hash table. If result is present, we print the element and key in hash (which is an element of first array).

## C++

```// C++ program to find all pair in both arrays
// whose sum is equal to given value x
#include<bits/stdc++.h>
using namespace std;

// Function to find all pairs in both arrays
// whose sum is equal to given value x
void findPairs(int arr1[], int arr2[], int n,
int m, int x)
{
// Insert all elements of first array in a hash
unordered_set<int> s;
for (int i=0; i<n; i++)
s.insert(arr1[i]);

// Subtract sum from second array elements one
// by one and check it's present in array first
// or not
for (int j=0; j<m; j++)
if (s.find(x - arr2[j]) != s.end())
cout << x-arr2[j] << " "
<< arr2[j] << endl;
}

// Driver code
int main()
{
int arr1[] = {1, 0, -4, 7, 6, 4};
int arr2[] = {0 ,2, 4, -3, 2, 1};
int x = 8;
int n = sizeof(arr1)/sizeof(int);
int m = sizeof(arr2)/sizeof(int);
findPairs(arr1, arr2, n, m, x);
return 0;
}
```

## Java

```// JAVA Code for Given two unsorted arrays,
// find all pairs whose sum is x
import java.util.*;

class GFG {

// Function to find all pairs in both arrays
// whose sum is equal to given value x
public static void findPairs(int arr1[], int arr2[],
int n, int m, int x)
{
// Insert all elements of first array in a hash
HashMap<Integer, Integer> s = new HashMap<Integer, Integer>();

for (int i = 0; i < n; i ++)
s.put(arr1[i], 0);

// Subtract sum from second array elements one
// by one and check it's present in array first
// or not
for (int j = 0; j < m; j ++)
if (s.containsKey(x - arr2[j]))
System.out.println(x - arr2[j] + " " + arr2[j]);
}

/* Driver program to test above function */
public static void main(String[] args)
{
int arr1[] = {1, 0, -4, 7, 6, 4};
int arr2[] = {0 ,2, 4, -3, 2, 1};
int x = 8;

findPairs(arr1, arr2, arr1.length, arr2.length, x);

}
}
// This code is contributed by Arnav Kr. Mandal.
```

Output:

```6 2
4 4
6 2
7 1
```

Time Complexity : O(n)
Auxiliary Space : O(n)

This article is contributed by DANISH_RAZA . If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
2 Average Difficulty : 2/5.0
Based on 37 vote(s)