参考了大佬代码
'''
使用二分法,迭代处理
中间出现报错,处理方式是mid=(low+high)/2 要强制转换成int
'''
class Solution:
def GetNumberOfK(self, data, k):
num = 0
if data:
first = self.getFirstK(data, k , 0, len(data) - 1)
last = self.getLastK(data, k, 0, len(data) - 1)
if first > -1 and last > -1:
num = last - first + 1
return num
def getFirstK(self, data, k, start, end):
if start > end:
return -1
mid = int((start + end) / 2)
midD = data[mid]
if midD > k:
end = mid - 1
elif midD < k:
start = mid + 1
else:
if (mid == 0) or (mid > 0 and data[mid - 1] != k):
return mid
else:
end = mid - 1
return self.getFirstK(data, k, start, end)
def getLastK(self, data, k, start, end):
if start > end:
return -1
mid = int((start + end) / 2)
midD = data[mid]
if midD > k:
end = mid - 1
elif midD < k:
start = mid + 1
else:
if (mid == len(data) - 1) or (mid < len(data) - 1 and data[mid + 1] != k):
return mid
else:
start = mid + 1
return self.getLastK(data, k, start, end)#复制粘贴搞错了。。
data=[1,2,2,2,3,4,5]
k=2
r=Solution().GetNumberOfK(data,2)
print(r)
print(r*k)