想的是先二分查找,找到之后再找周围是否有相同
运行时间:27ms
占用内存:5752k
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
if k not in data:
return 0
lo = 0
hi = len(data)
while (lo<=hi):
mid = (lo+hi)//2
if data[mid]==k:
res = mid
break
elif data[mid]<k:
lo = mid+1
else:
hi = mid-1
cnt = 0
while (mid>=0 and data[mid]==k):
cnt += 1
mid -= 1
while (res+1<len(data) and data[res+1]==k):
cnt += 1
res += 1
return cnt
-------------------------------------------
其他思路:
1、查找num-0.5和num+0.5的位置,然后相减即可
2、二分的时候用两个二分,一个查找第一次出现的位置,即如果num[mid-1]==k,则hi=mid-1继续查找;第二个查找最后一次出现的位置,即如果num[mid+1]==k,则lo=mid+1继续查找