1200. Minimum Absolute Difference

Easy


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, b are from arr
  • a < b
  • b - a equals to the minimum absolute difference of any two elements in arr

 

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




 class Solution:
    def minimumAbsDifference(self, nums: List[int]) -> List[List[int]]:
#         nums.sort()

#         diff_map = defaultdict(list)

#         for i, num in enumerate(nums[1:]):
#             diff = abs(num - nums[i])
#             diff_map[diff].append([nums[i], num] )
#         return diff_map[min(diff_map.keys())]

#         nums.sort()

#         min_diff = sys.maxsize
#         diff_map = []

#         for i, num in enumerate(nums[1:]):
#             diff = abs(num - nums[i])

#             if diff == min_diff:
#                 diff_map.append([nums[i], num])

#             elif diff < min_diff:
#                 min_diff = diff
#                 diff_map = [[nums[i], num]]

#         return diff_map

        # ---------------Using Count sort ----------------------
        mini, maxi = min(nums), max(nums)
        counter = [0] * (maxi-mini+1)
        shift = -mini

        for num in nums:
            counter[num+shift] = 1 

        min_abs_diff = maxi-mini
        min_abs_list = []


        prev = 0
        for curr in range(1, maxi+shift+1):

            if counter[curr] == 0:
                continue

            if curr-prev == min_abs_diff:
                min_abs_list.append([prev-shift, curr-shift])

            elif curr-prev < min_abs_diff:
                min_abs_list = [[prev-shift, curr-shift]]
                min_abs_diff = curr - prev

            prev = curr

        return min_abs_list

Random Note


Started keeping online notes!