Talk is cheap.
func getNumberOfK(nums []int , k int) int{
if len(nums) == 0 { return 0 }
ret := search(nums, 0, len(nums)-1,k)
if ret[0] == -1 { return 0 }
return ret[1] - ret[0] + 1
}
func search(nums []int, lo int, hi int, k int) []int {
res := []int{-1, -1}
if nums[lo] == k && k == nums[hi] {
res[0], res[1] = lo, hi
} else if nums[lo] <= k && k <= nums[hi] {
mid := lo + (hi - lo) / 2
left, right := search(nums, lo, mid, k), search(nums, mid + 1, hi, k)
if left[0] == -1 {
res[0], res[1] = right[0], right[1]
} else if right[0] == -1 {
res[0], res[1] = left[0], left[1]
} else {
res[0], res[1] = left[0], right[1]
}
}
return res
}