Leetcode: 719. Find K-th Smallest Pair Distance

Problem Statement

from typing import List


class Solution:
    def smallestDistancePair(self, nums: List[int], k: int) -> int:
        N = len(nums)
        nums.sort()

        def check(delta):
            cur = 0
            for i in range(N):
                j = bisect_right(nums, nums[i] + delta, lo=i)
                cur += j - i - 1
            return cur >= k

        lo = 0
        hi = nums[-1] - nums[0]
        while lo < hi:
            mid = lo + (hi - lo) // 2
            if check(mid):
                hi = mid
            else:
                lo = mid + 1
        return lo