博主目前也在学习,有错误欢迎指正
保持热爱 奔赴星海
给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差
class Solution {
public int smallestDifference(int[] a, int[] b) {
}
}
面试题 16.06. 最小差
(1)对两个数组排序,定义两个指针i和j,分别指向a,b数组的第一个元素。
(2)遍历两个数组,若a[i]和b[j]相等,直接返回零,若a[i] > b[j],记录最小值,j++。若a[i] < b[j],记录最小值,i++。
(3)需要注意的一点是,未防止溢出,我们记录最小值时用long类型。
class Solution {
public int smallestDifference(int[] a, int[] b) {
Arrays.sort(a);
Arrays.sort(b);
int i = 0;
int j = 0;
long res = Long.MAX_VALUE;
while(i < a.length && j < b.length) {
if(a[i] == b[j]) {
return 0;
}
if(a[i] > b[j]) {
res = Math.min(res,(long)a[i] - (long)b[j]);
j++;
}else {
res = Math.min(res,(long)b[j] - (long)a[i]);
i++;
}
}
return (int)res;
}
}
双指针