From 03dc69e6ed7347e17646e8ce9e9695344e2c02e9 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Mon, 27 May 2024 13:35:34 +0200 Subject: [PATCH] =?UTF-8?q?go:=20add=20=C2=AB1608.=20Special=20Array=20Wit?= =?UTF-8?q?h=20X=20Elements=20Greater=20Than=20or=20Equal=20X=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- ...with-x-elements-greater-than-or-equal-x.go | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 go/special-array-with-x-elements-greater-than-or-equal-x.go diff --git a/go/special-array-with-x-elements-greater-than-or-equal-x.go b/go/special-array-with-x-elements-greater-than-or-equal-x.go new file mode 100644 index 0000000..36eb8fe --- /dev/null +++ b/go/special-array-with-x-elements-greater-than-or-equal-x.go @@ -0,0 +1,37 @@ +package special_array_with_x_elements_greater_than_or_equal_x + +import ( + "slices" +) + +func specialArray(nums []int) int { + bsearch := func(key int) int { + l := 0 + r := len(nums) - 1 + + idx := len(nums) + for l <= r { + mid := (l + r) / 2 + + if nums[mid] >= key { + idx = mid + r = mid - 1 + } else { + l = mid + 1 + } + } + + return idx + } + + slices.Sort(nums) + for i, _ := range nums { + k := bsearch(i + 1) + + if len(nums)-k == i+1 { + return i + 1 + } + } + + return -1 +}