Back to writing

1200. Minimum Absolute Difference

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

Substring a String

  • string[start:end:step]
  • from first string[2:6]
  • last char string[-1]
  • last char by index string[-1]
  • from last string[-5:]
  • first to last string[1:-4]
StringPython
Link →