当前位置: 首页 > 后端技术 > Python

力扣-面试题53-I.在排序数组中找一个数I【剑指offer】【Python】

时间:2023-03-26 00:47:24 Python

问题是计算一个数字在排序数组中出现的次数。示例1:输入:nums=[5,7,7,8,8,10],target=8输出:2示例2:输入:nums=[5,7,7,8,8,10],target=6输出:0限制:0<=数组长度<=50000注:本题与主站34题相同(只是返回值不同):https://leetcode-cn.com/probl...思路是进行两次二分查找Binarysearch,分别找出右边界和左边界。第二次搜索左边界可以直接在[0,R]中搜索。代码Python3class解决方案:defsearch(self,nums:List[int],target:int)->int:left=0right=len(nums)-1#找到右边界whileleft<=right:mid=left+(right-left)//2ifnums[mid]<=target:left=mid+1elifnums[mid]>target:right=mid-1R=right#如果R越界或者R的值position不等于target,表示没有target,如果R<0ornums[R]!=target:return0left=0#缩小区间,直接找左边界直接return0in[0,R]right=R#找到左边界whileleft<=right:mid=left+(right-left)//2ifnums[mid]>=target:right=mid-1elifnums[mid]