Related Articles

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

• Last Updated : 17 Jun, 2021

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 arrays 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!

Want to learn from the best curated videos and practice problems, check out the C Foundation Course for Basic to Advanced C.

My Personal Notes arrow_drop_up