题目描述
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
解题思路
- 二分查找。
- 通过处理等于的情况,查找左右边界,下边相减即为出现次数
- 右边界:等于的时候,左指针继续向右移
- 左边界:等于的时候,右指针继续向左移
- 左右都会超出目标值一位,最后结果要减去一
代码实现
func search(nums []int, target int) int {
i := 0
j := len(nums) - 1
for i <= j {
mid := i + (j - i) / 2
if nums[mid] <= target {
i = mid + 1
} else {
j = mid - 1
}
}
right := i
i = 0
j = len(nums) - 1
for i <= j {
mid := i + (j - i) / 2
if nums[mid] >= target {
j = mid - 1
} else {
i = mid + 1
}
}
left := j
return right - left - 1
}