「每日LeetCode」2021年1月1日

本文最后更新于:2023年3月19日 晚上

Lt1200. 最小绝对差

1200. 最小绝对差

给你个整数数组 arr,其中每个元素都 不相同
请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。
 示例 1:

1
2
输入:arr = [4,2,1,3]
输出:[[1,2],[2,3],[3,4]]

示例 2:

1
2
输入:arr = [1,3,6,10,15]
输出:[[1,3]]

示例 3:

1
2
输入:arr = [3,8,-10,23,19,-4,-14,27]
输出:[[-14,-10],[19,23],[23,27]]

提示:

  • 2 <= arr.length <= 10^5
  • -10^6 <= arr[i] <= 10^6

思路

升序排序后,使用一个 minAbs 记录最小的绝对差,比较相邻的元素:如果绝对差比最小绝对差要大,直接跳过;如果相等,在结果数组中插入相应的值;如果要小,更新 minAbs,并结果数组设为空,重新开始插入新数组对。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @param {number[]} arr
* @return {number[][]}
*/
var minimumAbsDifference = function (arr) {
arr.sort((a, b) => a - b);
let res = [];
let minAbs = Infinity;
for (let i = 0; i < arr.length - 1; i++) {
const abs = arr[i + 1] - arr[i];
if (abs < minAbs) {
minAbs = abs;
res = [[arr[i], arr[i + 1]]];
} else if (abs === minAbs) {
res.push([arr[i], arr[i + 1]]);
}
}
return res;
};