📅  最后修改于: 2023-12-03 14:43:03.164000             🧑  作者: Mango
此程序解决了一个常见问题:从两个排序数组中找到最接近的对。
给定两个已排序的整数数组 nums1
和 nums2
,长度分别为 m
和 n
。如果子数组 (a, b)
中的元素 a
和 b
满足 |a - b|
的绝对值最小,则称子数组 (a, b)
是最接近的对。
我们需要在这两个数组中找到最接近的对,并返回结果。
我们可以使用双指针法来解决这个问题。双指针法的基本思想是,定义两个指针分别指向两个数组的开头,然后比较两个指针所指元素的差的绝对值,并更新最小差的值和对应的子数组。
以下是用Java实现的解决方案:
public class Solution {
public int[] closestPair(int[] nums1, int[] nums2) {
int m = nums1.length;
int n = nums2.length;
int minDiff = Integer.MAX_VALUE;
int[] closestPair = new int[2];
int i = 0, j = 0;
while (i < m && j < n) {
int diff = Math.abs(nums1[i] - nums2[j]);
if (diff < minDiff) {
minDiff = diff;
closestPair[0] = nums1[i];
closestPair[1] = nums2[j];
}
if (nums1[i] < nums2[j]) {
i++;
} else {
j++;
}
}
return closestPair;
}
}
以下是一些测试示例的使用方法:
public class Main {
public static void main(String[] args) {
Solution solution = new Solution();
int[] nums1 = {1, 3, 5};
int[] nums2 = {2, 4, 6};
int[] closestPair = solution.closestPair(nums1, nums2);
System.out.println("最接近的对: [" + closestPair[0] + ", " + closestPair[1] + "]");
int[] nums3 = {1, 7, 10};
int[] nums4 = {2, 5, 8};
int[] closestPair2 = solution.closestPair(nums3, nums4);
System.out.println("最接近的对: [" + closestPair2[0] + ", " + closestPair2[1] + "]");
}
}
输出结果如下所示:
最接近的对: [3, 2]
最接近的对: [1, 2]
以上是通过使用双指针法来解决从两个排序数组中找到最接近的对的Java程序。希望对你有帮助!