描述
统计一个数字在升序数组中出现的次数。
总结:求解升序数组的题目一般都可以用二分法解决
官方题解:
①二分查找法,获取目标值的前后下标,即获取目标值在数组中的长度
②关键是运用微妙的 + 0.5 和 - 0.5,找出数组中第一个大于k和最后一个小于k的数的下标,相减就可以获得k在数组中的长度
class Solution:
def GetNumberOfK(self, data, k):
# write code here
n = len(data)
left, right = 0, n - 1
while left <= right:
mid = (left + right) // 2
if data[mid] < k:
left = mid + 1
elif data[mid] > k:
right = mid - 1
else:
right = mid - 1
l = right
left, right = 0, n - 1
while left <= right:
mid = (left + right) // 2
if data[mid] < k:
left = mid + 1
elif data[mid] > k:
right = mid - 1
else:
left = mid + 1
r = left
cur = r - l - 1
return cur if cur > 0 else 0
还有用python的内置函数:
class Solution:
def GetNumberOfK(self, data, k):
return data.count(k)