题目:统计一个数字在排序数组中出现的次数。题目链接
要点记录:
题目本身不难,但解题巧妙点在于对“次数”概念的转化——次数=数字在数组中出现的右边界-数字在数组中出现的左边界——更精妙的转化:次数=数字在数组中出现的右边界-(数字-1)在数组中出现的右边界。
这样思路的转化极大程度的减少了时间,提升了效率。
代码实现:
class Solution:
def search(self, nums: List[int], target: int) -> int:
def find_border(target):
left = 0
right = len(nums)-1
while left <= right:
mid = (left + right)//2
if nums[mid] <= target:
left = mid + 1
else:
right = mid - 1
return left
return find_border(target) - find_border(target-1)