C# 程序从两个排序数组中查找最近的对
给定两个排序数组和一个数字 x,找到总和最接近 x 的对,并且该对在每个数组中都有一个元素。
给定两个数组 ar1[0…m-1] 和 ar2[0..n-1] 以及一个数字 x,我们需要找到对 ar1[i] + ar2[j] 使得 (ar1 [i] + ar2[j] – x) 是最小值。
例子:
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.
输出:
The closest pair is [7, 30]
有关更多详细信息,请参阅有关从两个排序数组中查找最近对的完整文章!