题目描述:
给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数
示例1
输入:[1,2,3,3,3,3,4,5],3
返回值:4
解题思路:
1、看到非降序数组,想到二分法
获取目标值的前后下标,即获取目标值在数组中的长度
关键是运用微妙的 + 0.5 和 - 0.5,找出数组中第一个大于k和最后一个小于k的数的下标,相减就可以获得k在数组中的长度
Python代码实现:
class Solution:
def find_k(self,data,k):
left_index=0
right_index=len(data)-1
while left_index<=right_index:
mid=(left_index+right_index)>>1
if data[mid]<k:
left_index=mid+1
if data[mid]>k:
right_index=mid-1
return right_index
def GetNumberOfK(self , data: List[int], k: int) -> int:
# write code here
if not data:
return 0
return self.find_k(data, k+0.5)-self.find_k(data, k-0.5)
2、暴力解法:
Python实现:
class Solution:
def GetNumberOfK(self , data: List[int], k: int) -> int:
# write code here
if not data:
return 0
return data.count(k)