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
PHP
<?php // PHP program to find the pair // from two sorted arrays such // that the sum of pair is // closest to a given number x // 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. function printClosest( $ar1 , $ar2 , $m , $n , $x ) { // Initialize the diff between // pair sum and x. $diff = PHP_INT_MAX; // res_l and res_r are result // indexes from ar1[] and ar2[] // respectively $res_l ; $res_r ; // Start from left side of // ar1[] and right side of ar2[] $l = 0; $r = $n - 1; while ( $l < $m and $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 --; // move to the greater side else $l ++; } // Print the result echo "The closest pair is [" , $ar1 [ $res_l ], ", " , $ar2 [ $res_r ], "] \n" ; } // Driver Code $ar1 = array (1, 4, 5, 7); $ar2 = array (10, 20, 30, 40); $m = count ( $ar1 ); $n = count ( $ar2 ); $x = 38; printClosest( $ar1 , $ar2 , $m , $n , $x ); // This code is contributed by anuj_67. ?> |
The closest pair is [7, 30]
Time Complexity : O(m+n) i.e. linear.
Auxiliary Space : O(1)
Please refer complete article on Find the closest pair from two sorted arrays for more details!