剑指 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
for left <= right {
mid := (left + right) / 2
if target <= n[mid]{ //核心! 此时有取等号,说明相等时left取到 最小值の左边界
right = mid - 1
} else {
left = mid + 1
}
}
return left
} ```