剑指 Offer 53 - I. 在排序数组中查找数字 I

统计一个数字在排序数组中出现的次数。
和力扣34. 在排序数组中查找元素的第一个和最后一个位置 一致

示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2

  • 时间复杂度: O(logn) ,其中 n为数组的长度。二分查找的时间复杂度为 O(logn),一共会执行两次,因此总时间复杂度为 O(logn)。
  • 空间复杂度:O(1) 。只需要常数空间存放若干变量
    ```go //时间Ologn,空间O1 func search(nums []int, target int) int { r1 := rightIndex(nums, target) //找到目标值 r2 := rightIndex(nums, target + 1) //找到比他大一个的目标值,若没有就 作为第一个新值插入其中 return r2 - r1 }

func rightIndex(n []int, target int) int { left := 0 right := len(n) - 1

  1. for left <= right {
  2. mid := (left + right) / 2
  3. if target <= n[mid]{ //核心! 此时有取等号,说明相等时left取到 最小值の左边界
  4. right = mid - 1
  5. } else {
  6. left = mid + 1
  7. }
  8. }
  9. return left

} ```