题目描述
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
解题思路: 二分法
因为是在排序数组中查找, 所以我们可以通过二分法.
- 通过二分法在数组中找到等于target的最后一位
- 再次通过二分法在数组中找到小于target的第一位
- 根据步骤1,2找到的idx相减就是target的个数
示例代码:
def search(self, nums: List[int], target: int) -> int:
l, r = 0, len(nums) - 1
while l <= r:
mid = (l + r) // 2
if nums[mid] <= target:
l = mid + 1
else:
r = mid - 1
right = l
if r >= 0 and nums[r] != target: # 如果第一次没找到target 可以提前返回
return 0
l = 0
while l <= r:
mid = (l + r) // 2
if nums[mid] < target:
l = mid + 1
else:
r = mid - 1
left = r
return right - left - 1