# C Program to Find the closest pair from two sorted arrays

Given two sorted arrays and a number x, find the pair whose sum is closest to x and the pair has an element from each array.

We are given two arrays ar1[0…m-1] and ar2[0..n-1] and a number x, we need to find the pair ar1[i] + ar2[j] such that absolute value of (ar1[i] + ar2[j] – x) is minimum.

Example:

```Input:  ar1[] = {1, 4, 5, 7};
ar2[] = {10, 20, 30, 40};
x = 32
Output:  1 and 30

Input:  ar1[] = {1, 4, 5, 7};
ar2[] = {10, 20, 30, 40};
x = 50
Output:  7 and 40
```

## C++

 `// C++ program to find the pair from two sorted arays such ` `// that the sum of pair is closest to a given number x ` `#include ` `#include ` `#include ` `using` `namespace` `std; ` ` `  `// ar1[0..m-1] and ar2[0..n-1] are two given sorted arrays ` `// and x is given number. This function prints the pair  from ` `// both arrays such that the sum of the pair is closest to x. ` `void` `printClosest(``int` `ar1[], ``int` `ar2[], ``int` `m, ``int` `n, ``int` `x) ` `{ ` `    ``// Initialize the diff between pair sum and x. ` `    ``int` `diff = INT_MAX; ` ` `  `    ``// res_l and res_r are result indexes from ar1[] and ar2[] ` `    ``// respectively ` `    ``int` `res_l, res_r; ` ` `  `    ``// Start from left side of ar1[] and right side of ar2[] ` `    ``int` `l = 0, r = n - 1; ` `    ``while` `(l < m && r >= 0) { ` `        ``// If this pair is closer to x than the previously ` `        ``// found closest, then update res_l, res_r and diff ` `        ``if` `(``abs``(ar1[l] + ar2[r] - x) < diff) { ` `            ``res_l = l; ` `            ``res_r = r; ` `            ``diff = ``abs``(ar1[l] + ar2[r] - x); ` `        ``} ` ` `  `        ``// If sum of this pair is more than x, move to smaller ` `        ``// side ` `        ``if` `(ar1[l] + ar2[r] > x) ` `            ``r--; ` `        ``else` `// move to the greater side ` `            ``l++; ` `    ``} ` ` `  `    ``// Print the result ` `    ``cout << ``"The closest pair is ["` `<< ar1[res_l] << ``", "` `         ``<< ar2[res_r] << ``"] \n"``; ` `} ` ` `  `// Driver program to test above functions ` `int` `main() ` `{ ` `    ``int` `ar1[] = { 1, 4, 5, 7 }; ` `    ``int` `ar2[] = { 10, 20, 30, 40 }; ` `    ``int` `m = ``sizeof``(ar1) / ``sizeof``(ar1[0]); ` `    ``int` `n = ``sizeof``(ar2) / ``sizeof``(ar2[0]); ` `    ``int` `x = 38; ` `    ``printClosest(ar1, ar2, m, n, x); ` `    ``return` `0; ` `} `

Output:

```The closest pair is [7, 30]
```

Please refer complete article on Find the closest pair from two sorted arrays for more details!

My Personal Notes arrow_drop_up
Article Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.