From 9b4f9e08477a683092d92db5f763a7c1fdd24ec0 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Wed, 14 Aug 2024 21:39:14 +0200 Subject: [PATCH] =?UTF-8?q?go:=20add=20=C2=AB719.=20Find=20K-th=20Smallest?= =?UTF-8?q?=20Pair=20Distance=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- go/find-k-th-smallest-pair-distance.go | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 go/find-k-th-smallest-pair-distance.go 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 +}