测试先行,一次通过。25min。
1.都没找到的特殊情况要进行处理
def GetNumberOfK(self, data, k):
first=self.GetFirstK(data,k)
last=self.GetLastK(data,k)
res=last-first+1 if last!=-1 else 0 #这里针对都是-1,那么会得出1的错误答案
return res
def GetFirstK(self,data,k):
l,r=0,len(data)-1
while l<=r:
m = (l + r) // 2
if data[m]>k:r=m-1
elif data[m]<k:l=m+1
elif m==0 or data[m-1]!=k:return m
else:r=m-1
return -1
def GetLastK(self,data,k):
l,r=0,len(data)-1
while l<=r:
m=(l+r)//2
if k>data[m]:l=m+1
elif k<data[m]:r=m-1
elif m==len(data)-1 or k!=data[m+1]:return m # 注意数组越界
else:l=m+1
return -1
if __name__ == '__main__':
t=Solution()
print(t.GetNumberOfK([2,3,3,4],2))
print(t.GetNumberOfK([3,3,3,4],3))
print(t.GetNumberOfK([3,3,3,4],4))
print(t.GetNumberOfK([3,3,3,4],5))
print(t.GetNumberOfK([],5))
网友评论