Open In App
Related Articles

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

Improve Article
Improve
Save Article
Save
Like Article
Like

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 closest pair in
// an array
using System;
 
class GFG {
 
    // 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.
    static void printClosest(int[] ar1,
                             int[] ar2, int m, int n, int x)
    {
 
        // Initialize the diff between pair
        // sum and x.
        int diff = int.MaxValue;
 
        // 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
        Console.Write("The closest pair is ["
                      + ar1[res_l] + ", "
                      + ar2[res_r] + "]");
    }
 
    // Driver program to test above functions
    public static void Main()
    {
        int[] ar1 = { 1, 4, 5, 7 };
        int[] ar2 = { 10, 20, 30, 40 };
        int m = ar1.Length;
        int n = ar2.Length;
        int x = 38;
 
        printClosest(ar1, ar2, m, n, x);
    }
}
 
// This code is contributed by nitin mittal.


Output:

The closest pair is [7, 30]

Time Complexity: O(m + n), where m and n represents the size of the given two arrays.
Auxiliary Space: O(1), no extra space is required, so it is a constant.

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


Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out - check it out now!

Last Updated : 27 May, 2022
Like Article
Save Article
Previous
Next
Similar Reads