给你个整数数组 arr
,其中每个元素都 不相同。
请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。
每对元素对 [a,b
] 如下:
a , b
均为数组arr
中的元素a < b
b - a
等于arr
中任意两个元素的最小绝对差
示例 1:
输入:arr = [4,2,1,3] 输出:[[1,2],[2,3],[3,4]]
示例 2:
输入:arr = [1,3,6,10,15] 输出:[[1,3]]
示例 3:
输入: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
方法一:排序
时间复杂度
class Solution:
def minimumAbsDifference(self, arr: List[int]) -> List[List[int]]:
arr.sort()
ans = []
mi = inf
for a, b in pairwise(arr):
d = b - a
if d < mi:
ans = [(a, b)]
mi = d
elif d == mi:
ans.append((a, b))
return ans
class Solution {
public List<List<Integer>> minimumAbsDifference(int[] arr) {
Arrays.sort(arr);
List<List<Integer>> ans = new ArrayList<>();
int n = arr.length;
int mi = Integer.MAX_VALUE;
for (int i = 0; i < n - 1; ++i) {
int a = arr[i], b = arr[i + 1];
int d = b - a;
if (d < mi) {
ans.clear();
ans.add(Arrays.asList(a, b));
mi = d;
} else if (d == mi) {
ans.add(Arrays.asList(a, b));
}
}
return ans;
}
}
class Solution {
public:
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
sort(arr.begin(), arr.end());
int mi = INT_MAX;
int n = arr.size();
vector<vector<int>> ans;
for (int i = 0; i < n - 1; ++i) {
int a = arr[i], b = arr[i + 1];
int d = b - a;
if (d < mi) {
mi = d;
ans.clear();
ans.push_back({a, b});
} else if (d == mi)
ans.push_back({a, b});
}
return ans;
}
};
func minimumAbsDifference(arr []int) [][]int {
sort.Ints(arr)
mi := math.MaxInt32
var ans [][]int
for i, a := range arr[:len(arr)-1] {
b := arr[i+1]
d := b - a
if d < mi {
mi = d
ans = [][]int{[]int{a, b}}
} else if d == mi {
ans = append(ans, []int{a, b})
}
}
return ans
}