1200. 最小絕對差

簡單 數組 排序

思路

要找到絕對值差最小的元素對,並按照升序的順序返回。

「絕對值差最小」相當於座標軸上的距離最小,每一個數都可以看作在軸上的點。
因此排序過後遍歷,就相當於在座標軸上從最小的點往後面走,第一個遇到的的點就是離自己最近的。

假如遇到距離比現在更小的,就丟掉紀錄到一半的結果,重新開始紀錄。

程式碼

排序

class Solution {
public:
    vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
        ranges::sort(arr);
        int n = arr.size();
        int mnDiff = INT_MAX;
        vector<vector<int>> res;
        for(int i = 1; i < n; ++i) {
            int diff = arr[i] - arr[i - 1]; // arr 嚴格遞增
            if(diff < mnDiff) {
                mnDiff = diff;
                res.clear();
                res.push_back({arr[i - 1], arr[i]});
            }
            else if(diff == mnDiff) {
                res.push_back({arr[i - 1], arr[i]});
            }
        }
        return res;
    }
};

複雜度分析

  • 時間複雜度:O(nlogn)O(n\log{n}),主要在排序上。
  • 空間複雜度:O(n)O(n),最糟的情況是一共有 n1n-1 對答案。

顯示設定

背景線條
顯示背景網格線條
懸停發光
滑鼠懸停時顯示霓虹效果
聚光燈
跟隨滑鼠的聚光燈效果
背景透明度
開啟透明玻璃效果
主題顏色
自訂主要顏色