Description
You are given a 0-indexed integer array nums and an integer x.
Find the minimum absolute difference between two elements in the array that are at least x indices apart.
In other words, find two indices i and j such that abs(i - j) >= x and abs(nums[i] - nums[j]) is minimized.
Return an integer denoting the minimum absolute difference between two elements that are at least x indices apart.
Β
Example 1:
Input: nums = [4,3,2,4], x = 2 Output: 0 Explanation: We can select nums[0] = 4 and nums[3] = 4. They are at least 2 indices apart, and their absolute difference is the minimum, 0. It can be shown that 0 is the optimal answer.
Example 2:
Input: nums = [5,3,2,10,15], x = 1 Output: 1 Explanation: We can select nums[1] = 3 and nums[2] = 2. They are at least 1 index apart, and their absolute difference is the minimum, 1. It can be shown that 1 is the optimal answer.
Example 3:
Input: nums = [1,2,3,4], x = 3 Output: 3 Explanation: We can select nums[0] = 1 and nums[3] = 4. They are at least 3 indices apart, and their absolute difference is the minimum, 3. It can be shown that 3 is the optimal answer.
Β
Constraints:
- 1 <= nums.length <= 105
- 1 <= nums[i] <= 109
- 0 <= x < nums.length
Solution
Python3
from sortedcontainers import SortedList
 
class Solution:
    def minAbsoluteDifference(self, nums: List[int], k: int) -> int:
        N = len(nums)
        sl = SortedList()
        res = abs(nums[0] - nums[k])
        
        for i in range(k, N):
            sl.add(nums[i])
        
        for i, x in enumerate(nums):
            index = sl.bisect_left(x)
            M = len(sl)
            
            for j in [index - 1, index]:
                if 0 <= j < M:
                    res = min(res, abs(sl[j] - x))
            
            if i + k < N:
                sl.remove(nums[i + k])
        
        return res