搜索相关 python
—————剑指offer—————
easy
1)JZ53 数字在升序数组中出现的次数(在排序数组中查找数字 )
题目描述
①方法一:普通方法,暴力遍历,与排序数组无关了
class Solution:
def search(self, nums: List[int], target: int) -> int:
k = 0
for i in nums:
if i == target:
k += 1
return k
②方法二:排序数组,二分法
注意这个左右边界是左右外边界
class Solution:
def GetNumberOfK(self , data: List[int], k: int) -> int:
# write code here
i = 0
j = len(data)-1
while i<=j: # 寻找右边界
m = (i+j) // 2 # 向下取整
if data[m]<= k: i=m+1
else: j=m-1
right = i
if j>=0 and data[j]!=k: return 0 # 这句话注释掉也能通过,是优化语句
i=0
while i<=j: # 寻找左边界
m = (i+j) // 2 # 向下取整
if data[m]< k: i=m+1 # 这里没有等于
else: j=m-1
left = j
return right-left