Minimum Absolute Difference

easy array sorting

Problem

Given an array of distinct integers, return all pairs [a, b] (a < b) whose absolute difference equals the minimum absolute difference of any two elements. The pairs must be returned in ascending order.

Inputarr = [4, 2, 1, 3]
Output[[1, 2], [2, 3], [3, 4]]
After sorting → [1, 2, 3, 4]; every adjacent diff is 1, the minimum.

def minimum_abs_difference(arr):
    arr.sort()
    best = min(arr[i] - arr[i-1] for i in range(1, len(arr)))
    return [[arr[i-1], arr[i]] for i in range(1, len(arr)) if arr[i] - arr[i-1] == best]
function minimumAbsDifference(arr) {
  arr.sort((a, b) => a - b);
  let best = Infinity;
  for (let i = 1; i < arr.length; i++) best = Math.min(best, arr[i] - arr[i - 1]);
  const out = [];
  for (let i = 1; i < arr.length; i++) if (arr[i] - arr[i - 1] === best) out.push([arr[i - 1], arr[i]]);
  return out;
}
class Solution {
    public List<List<Integer>> minimumAbsDifference(int[] arr) {
        Arrays.sort(arr);
        int best = Integer.MAX_VALUE;
        for (int i = 1; i < arr.length; i++) best = Math.min(best, arr[i] - arr[i - 1]);
        List<List<Integer>> out = new ArrayList<>();
        for (int i = 1; i < arr.length; i++)
            if (arr[i] - arr[i - 1] == best) out.add(List.of(arr[i - 1], arr[i]));
        return out;
    }
}
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
    sort(arr.begin(), arr.end());
    int best = INT_MAX;
    for (int i = 1; i < (int)arr.size(); i++) best = min(best, arr[i] - arr[i - 1]);
    vector<vector<int>> out;
    for (int i = 1; i < (int)arr.size(); i++)
        if (arr[i] - arr[i - 1] == best) out.push_back({arr[i - 1], arr[i]});
    return out;
}
Time: O(n log n) Space: O(n) (output)