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 +}