题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
思路:强行使用二分查找方法 1、二分查找找最左k,二分查找找最右k 2、位置间距离既为答案
class Solution:
def GetNumberOfK(self , data: List[int], k: int) -> int:
if k not in data:
return 0
if len(data) <= 1:
return len(data)
left_index = self.get_left_k(data, k)
right_index = self.get_right_k(data, k)
return right_index - left_index + 1
def get_left_k(self, data, k):
if k not in data:
return 0
l = 0
r = len(data) - 1
while l + 1 < r:
mid = (l + r) // 2
if data[mid] >= k: #找最左右先行
r = mid
else:
l = mid
if data[l] == k: #结果先判断左
return l
if data[r] == k:
return r
def get_right_k(self, data, k):
if k not in data:
return 0
l = 0
r = len(data) - 1
while l + 1 < r:
mid = (l + r) // 2
if data[mid] <= k: #找最右左先行
l = mid
else:
r = mid
if data[r] == k: #结果先判断右
return r
if data[l] == k:
return l