LeetCode1200. 最小绝对差
题目描述
本题目来自LeetCode上的『1200. 最小绝对差』
给你个整数数组 arr
,其中每个元素都 不相同。
请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。
示例1:
输入:arr = [4,2,1,3]
输出:[[1,2],[2,3],[3,4]]
提示
2 <= arr.length <= 10^5
-10^6 <= arr[i] <= 10^6
题解
将数组排序,最小的绝对值差一定在相邻的元素之间,因此我们只需遍历相邻的元素差值。
代码
class Solution {
public:
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
vector<vector<int>> ans;
int minDiff = INT_MAX, n = arr.size();
sort(arr.begin(), arr.end());
for (int i = 1; i < n; ++i) {
int diff = arr[i] - arr[i - 1];
if (diff < minDiff) {
minDiff = diff;
ans.clear();
ans.emplace_back(initializer_list<int>{arr[i - 1], arr[i]});
} else if (diff == minDiff) {
ans.emplace_back(initializer_list<int>{arr[i - 1], arr[i]});
}
}
return ans;
}
};
复杂度分析
- 时间复杂度:$O(n\log{n})$
- 空间复杂度:$O(\log{n})$,为排序的栈空间