diff --git a/go/find-k-th-smallest-pair-distance.go b/go/find-k-th-smallest-pair-distance.go new file mode 100644 index 0000000..533e278 --- /dev/null +++ b/go/find-k-th-smallest-pair-distance.go @@ -0,0 +1,37 @@ +package main + +import "slices" + +func smallestDistancePair(nums []int, k int) int { + pairsWithMaxDistance := func(distance int) int { + count := 0 + + left := 0 + for right := 0; right < len(nums); right++ { + for nums[right]-nums[left] > distance { + left++ + } + + count += right - left + } + + return count + } + + slices.Sort(nums) + + low, high := 0, nums[len(nums)-1]-nums[0] + + for low < high { + mid := (low + high) / 2 + count := pairsWithMaxDistance(mid) + + if count < k { + low = mid + 1 + } else { + high = mid + } + } + + return low +}