题目描述
统计一个数字在排序数组中出现的次数。
用例
输入 | 输出 |
---|---|
[1,2,3,3,3,3,4,5],3 | 4 |
解题思路
看见有序,肯定就是二分查找了,算法比较简单,不多说,值得一提的是,不要拘泥于递归,要会循环写法。
Python 代码
# 因为data中都是整数,所以可以稍微变一下,不是搜索k的两个位置,而是搜索k-0.5和k+0.5
# 这两个数应该插入的位置,然后相减即可。
# -*- coding:utf-8 -*-
class Solution:
def GetNumberOfK(self, data, k):
# write code here
return self.biSearch(data, k+0.5) - self.biSearch(data, k-0.5)
def biSearch(self,data,num):
left = 0
right = len(data)-1
while left <= right:
mid = (left+right)//2
if data[mid] == num:
return mid
elif num < data[mid]:
right = mid - 1
elif num > data[mid]:
left = mid + 1
return left
s = Solution()
result = s.GetNumberOfK([1,2,3,3,3,3,4,5],3)
print(result)