題目描述
統計一個數字在排序數組中出現的次數。
分析
在有序數組中的查找,二分查找具有時間複雜度上的優勢。這裏直接利用二分查找來分別查找目標值的左右邊界
來確定出現的次數,那麼時間複雜度爲O(logn)。
代碼
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
if not data:return 0
left = self.GetLeftK(data, k)
right = self.GetRightK(data, k)
return right - left + 1 if left != -1 and right != -1 else 0
def GetLeftK(self, data, k):
left = 0
right = len(data) - 1
while left < right:
mid = left + (right - left) // 2
if data[mid] < k:
left = mid + 1
else:
right = mid
return left if data[left] == k else -1
def GetRightK(self, data, k):
left = 0
right = len(data) - 1
while left<right:
mid = left + (right - left + 1) // 2
if data[mid] > k:
right = mid - 1
else:
left = mid
return right if data[left] == k else -1