Java Program to Find the closest pair from two sorted arrays

• Last Updated : 02 Jan, 2019

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 arrayclass 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 */
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