二分法
由于是有序序列,可用二分法查寻目标数值k所在位置,再往前和往后统计k的数量
# @param data int整型一维数组
# @param k int整型
# @return int整型
#
class Solution:
def GetNumberOfK(self , data: List[int], k: int) -> int:
if len(data) == 0:
return 0
# 二分法
p,q = 0,len(data)
while p != q:
mid = int((p+q)/2)
if data[mid] == k: # 找到k
# 统计k出现的次数
ks = 1
i = mid - 1
j = mid + 1
# 往前
while i >= 0 and data[i] == k:
i -= 1
ks += 1
# 往后
while j <= len(data) - 1 and data[j] == k:
j += 1
ks += 1
return ks
elif data[mid] > k: # k位于mid的左侧
q = mid - 1
else: # k为mid的右侧
p = mid + 1
return 0