1200. Minimum Absolute Difference
Description
Given an array of distinct integers arr, find all pairs of elements with the minimum absolute difference of any two elements.
Return a list of pairs in ascending order(with respect to pairs), each pair [a, b] follows
a, bare fromarra < bb - aequals to the minimum absolute difference of any two elements inarr
Example 1:
Input: arr = [4,2,1,3] Output: [[1,2],[2,3],[3,4]] Explanation: The minimum absolute difference is 1. List all pairs with difference equal to 1 in ascending order.
Example 2:
Input: arr = [1,3,6,10,15] Output: [[1,3]]
Example 3:
Input: arr = [3,8,-10,23,19,-4,-14,27] Output: [[-14,-10],[19,23],[23,27]]
Constraints:
2 <= arr.length <= 105-106 <= arr[i] <= 106
Solutions
Solution 1: Sorting
Thinking
Enumerating all pairs is \(O(n^2)\), which is too slow for \(n \le 10^5\).
After sorting, the gap between any two values is at least the sum of adjacent gaps between them, so the global minimum absolute difference occurs only between neighbors.
We therefore sort \(arr\), scan adjacent differences for the minimum \(mi\), then collect every adjacent pair whose difference equals \(mi\). Sorting shrinks the candidate set; the two linear passes compute the extremum and gather the answer.
According to the problem description, we need to find the minimum absolute difference between any two elements in the array \(arr\). Therefore, we can first sort the array \(arr\), then traverse the adjacent elements to get the minimum absolute difference \(mi\).
Finally, we traverse the adjacent elements again to find all pairs of elements where the minimum absolute difference equals \(mi\).
The time complexity is \(O(n \times \log n)\), and the space complexity is \(O(\log n)\). Here, \(n\) is the length of the array \(arr\).
1 2 3 4 5 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |