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

## Java

`// Java program to find closest pair in an array ` `class` `ClosestPair { ` ` ` `// 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 = Integer.MAX_VALUE; ` ` ` ` ` `// res_l and res_r are result indexes from ar1[] and ar2[] ` ` ` `// respectively ` ` ` `int` `res_l = ` `0` `, res_r = ` `0` `; ` ` ` ` ` `// 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` `(Math.abs(ar1[l] + ar2[r] - x) < diff) { ` ` ` `res_l = l; ` ` ` `res_r = r; ` ` ` `diff = Math.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 ` ` ` `System.out.print(` `"The closest pair is ["` `+ ar1[res_l] + ` `", "` `+ ar2[res_r] + ` `"]"` `); ` ` ` `} ` ` ` ` ` `// Driver program to test above functions ` ` ` `public` `static` `void` `main(String args[]) ` ` ` `{ ` ` ` `ClosestPair ob = ` `new` `ClosestPair(); ` ` ` `int` `ar1[] = { ` `1` `, ` `4` `, ` `5` `, ` `7` `}; ` ` ` `int` `ar2[] = { ` `10` `, ` `20` `, ` `30` `, ` `40` `}; ` ` ` `int` `m = ar1.length; ` ` ` `int` `n = ar2.length; ` ` ` `int` `x = ` `38` `; ` ` ` `ob.printClosest(ar1, ar2, m, n, x); ` ` ` `} ` `} ` `/*This code is contributed by Rajat Mishra */` |

*chevron_right*

*filter_none*

**Output:**

The closest pair is [7, 30]

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

## Recommended Posts:

- Store duplicate keys-values pair and sort the key-value pair by key
- Find closest smaller value for every element in array
- Minimum absolute difference of a number and its closest prime
- Closest perfect square and its distance
- Java Program to find whether a no is power of two
- Java Program for Program to find area of a circle
- Sort an array of pairs using Java Pair and Comparator
- Rectangle with Maximum Area using Java Pair
- Search equal, bigger or smaller in a sorted array in Java
- First strictly greater element in a sorted array in Java
- First strictly smaller element in a sorted array in Java
- Maximum sum by picking elements from two arrays in order
- Java Program for GCD of more than two (or array) numbers
- Java Program for Common Divisors of Two Numbers
- Java Program to Multiply two Matrices of any size
- Java Program to Add two Matrices
- Java Program to Swap two Variables
- Java Program for Program to calculate area of a Tetrahedron
- Java Program for Program for array rotation
- Find the duration of difference between two dates in Java