面试题 16.06. 最小差
面试题 16.06. 最小差
给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差
示例:
输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}
输出: 3,即数值对(11, 8)
提示:
1 <= a.length, b.length <= 100000
-2147483648 <= a[i], b[i] <= 2147483647
正确结果在区间[-2147483648, 2147483647]内
代码如下:
class Solution {
/**
* @param Integer[] $a
* @param Integer[] $b
* @return Integer
*/
function smallestDifference($a, $b) {
sort($a);
sort($b);
list($la, $lb)= [count($a), count($b)];
$m = 2147483647;
$i = $j = 0;
while ($i < $la && $j < $lb) {
if ($a[$i] < $b[$j]) {
$m = min([$b[$j]-$a[$i], $m]);
$i += 1;
}else {
$m = min([$a[$i]-$b[$j], $m]);
$j += 1;
}
}
return $m;
}
}