题: 统计一个数字在排序数组中出现的次数。
#机智版
class Solution:
def search(self, nums: List[int], target: int) -> int:
if not nums: return 0
def right(ta):
i, j = 0, len(nums)-1
while i <= j:#为了弹出边界点
#二分 [i,m−1] [m,j]
m=(i+j)//2
if nums[m]>ta:
j=m-1
else:
i=m+1
return i #在刚刚好的m右边 即右边界
return right(target)-right(target-1)
#菜鸡做法
class Solution:
def search(self, nums: List[int], target: int) -> int:
count=0
for i in range(len(nums)):
if nums[i]==target:
count+=1
return count
#二分法
class Solution:
def search(self, nums: List[int], target: int) -> int:
if not nums: return 0
i, j = 0, len(nums)-1
if nums[i]>target or nums[j]<target:
return 0
else:
while i <= j:#为了弹出边界点
#二分 [i,m−1] [m,j]
m=(i+j)//2
if nums[m]>target:
j=m-1
else:
i=m+1
right=i #往右走 右边界
i=0
while i <= j:#为了弹出边界点
#二分 [i,m] [m+1,j]
m=(i+j)//2
if nums[m]>=target:
j=m-1
else:
i=m+1
left=j #往左走 左边界
return right-left-1