jd1606.最小差

题目描述

给定两个整数数组ab,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差

示例:

1
2
输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}
输出: 3,即数值对(11, 8)

题解

排序+双指针

这道题思路比较直观, 先排序, 然后利用双指针比较当前的两个数, 谁小就往右移动一位, 使不断逼近最小差值.

但是题目中恶心人的一点在于要考虑临界值的影响, 所以使用Long型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public int smallestDifference(int[] a, int[] b) {
Arrays.sort(a);
Arrays.sort(b);
int i = 0;
int j = 0;
long min = Long.MAX_VALUE;
while (i < a.length && j < b.length) {
long diff = Math.abs((long)a[i]-b[j]);
if (a[i]<b[j]){
i++;
}else {
j++;
}
min = Math.min(min, diff);
}
return (int)min;
}
-------------本文结束感谢您的阅读-------------
可以请我喝杯奶茶吗