1200.最小绝对差
链接:1200.最小绝对差
难度:Easy
标签:数组、排序
简介:请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。
题解 1 - cpp
- 编辑时间:2022-03-29
- 执行用时:52ms
- 内存消耗:32.3MB
- 编程语言:cpp
- 解法介绍:排序。
class Solution {
public:
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
vector<vector<int>> ans;
sort(arr.begin(), arr.end());
int prev = arr[0], nmax = INT_MAX;
for (int i = 1; i < arr.size(); i++) {
int num = arr[i];
if (num - prev <= nmax) {
if (num - prev < nmax) ans.clear();
vector<int> item;
item.push_back(prev);
item.push_back(num);
ans.push_back(item);
nmax = num - prev;
}
prev = num;
}
return ans;
}
};
题解 2 - cpp
- 编辑时间:2022-07-04
- 执行用时:60ms
- 内存消耗:31.8MB
- 编程语言:cpp
- 解法介绍:遍历,对于每个点找到他的最小值。
class Solution {
public:
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
vector<vector<int>> ans;
sort(arr.begin(), arr.end());
int nmin = INT_MAX;
for (int l = 0, r = 1; r < arr.size(); r++) {
while (l < r && abs(arr[l] - arr[r]) > nmin) l++;
if (l == r) continue;
int nextmin = abs(arr[l] - arr[r]);
if (nextmin < nmin) ans.clear();
nmin = nextmin;
vector<int> item(2);
item[0] = arr[l];
item[1] = arr[r];
ans.push_back(item);
}
return ans;
}
};