Python 这个程序是如何工作的?如何';第一个更大的等效工作方法
我不熟悉堆栈溢出。我希望这个问题符合准则。 谢谢Python 这个程序是如何工作的?如何';第一个更大的等效工作方法,python,search,binary-search,Python,Search,Binary Search,我不熟悉堆栈溢出。我希望这个问题符合准则。 谢谢 class Solution: def searchRange(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ start = self.firstGre
class Solution:
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
start = self.firstGreaterEqual(nums, target)
if start==len(nums) or nums[start]!=target:
return [-1, -1]
return [start, self.firstGreaterEqual(nums, target+1)-1]
def firstGreaterEqual(self, nums, target):
lo, hi = 0, len(nums)
while lo<hi:
mid = (hi+lo)//2
if nums[mid]<target:
lo = mid + 1
else:
hi = mid
return lo
Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]
Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]
类解决方案:
def搜索范围(自身、nums、目标):
"""
:type nums:List[int]
:类型目标:int
:rtype:List[int]
"""
start=self.firstGreaterEqual(nums,target)
如果start==len(nums)或nums[start]=目标:
返回[-1,-1]
return[start,self.firstGreaterEqual(nums,target+1)-1]
def FIRSTGREATEREQUALE(自身、nums、目标):
lo,hi=0,len(nums)
而lo所以它基本上是按照你指出的二进制搜索原理工作的
下面是算法的简单分解
- 首先,找到要查找的目标的第一个位置
- 如果目标没有出现,则返回[-1,-1]
- 然后找到第一次出现的
target+1
,假设出现存储在变量end
中,那么原始target
的最后一次出现将是'end-1'
首先,您会找到您正在查找的目标的第一个出现点
示例数组nums=[5,7,7,8,8,10],目标=8
lo=0
,hi=len(nums)
,mid=(hi+lo)//2
- 现在搜索数组的中间,这里
mid=3
- nums[3]处的元素为8,与taget相同
- 这是起始索引,返回它并存储在值
start
现在,我们从第一次出现开始进入下一个阶段
然后找到第一个出现的目标+1
lo=0
,hi=len(nums)
,mid=(hi+lo)//2
,target+1=9
现在搜索数组的中间,这里mid=3
nums[3]处的元素为8,小于target+1
,因此我们设置low=mid+1
接下来我们设置mid=(hi+lo)//2,即5
nums[5]处的元素为10,大于target+1
,因此我们设置hi=mid
在上一步之后,我们退出while循环
,因为条件while lo