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;
    }
};