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