<p>Given an array of <strong>distinct</strong> integers <code>arr</code>, find all pairs of elements with the minimum absolute difference of any two elements.</p>

<p>Return a list of pairs in ascending order(with respect to pairs), each pair <code>[a, b]</code> follows</p>

<ul>
	<li><code>a, b</code> are from <code>arr</code></li>
	<li><code>a &lt; b</code></li>
	<li><code>b - a</code> equals to the minimum absolute difference of any two elements in <code>arr</code></li>
</ul>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> arr = [4,2,1,3]
<strong>Output:</strong> [[1,2],[2,3],[3,4]]
<strong>Explanation: </strong>The minimum absolute difference is 1. List all pairs with difference equal to 1 in ascending order.</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> arr = [1,3,6,10,15]
<strong>Output:</strong> [[1,3]]
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> arr = [3,8,-10,23,19,-4,-14,27]
<strong>Output:</strong> [[-14,-10],[19,23],[23,27]]
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>2 &lt;= arr.length &lt;= 10<sup>5</sup></code></li>
	<li><code>-10<sup>6</sup> &lt;= arr[i] &lt;= 10<sup>6</sup></code></li>
</ul>

# Problem:
#   - Given int arr 'arr' of distinct integers
#   - Return the min abs diff of any two elements
#   - Return a list of pairs in ascending order [a, b] where a < b and b - a = abs min diff of any two elements in arr

# Example:
#   arr = [4 2 1 3]
#   return [ [1 2], [2 3], [3 4] ]
#   - Explanation: the min diff is 1, so we need to find all pairs that can be combined to this min diff

# Approach:
#   1. Find the min diff
#   2. Iterate through arr again and for each num, check to see if the complement exists to subtract towards the min diff
#       (curr_num - complement = min diff)
class Solution:
    def minimumAbsDifference(self, arr: List[int]) -> List[List[int]]:
        sorted_arr = sorted(arr)
        num_set = set(arr)
        min_diff = sorted_arr[1] - sorted_arr[0]
        results = []

        # 1. Find the min diff
        for idx in range(2, len(sorted_arr)):
            curr = sorted_arr[idx]
            prev = sorted_arr[idx - 1]
            min_diff = min(min_diff, curr - prev)
        
        # 2. Find pairs
        for num in sorted_arr:
            # complement - num = min_diff
            complement = min_diff + num
            if complement in num_set:
                results.append([num, complement])
        
        return results
35800