leetcode 34 排序数组中查找元素第一个和最后一个位置

Posted 灰人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 34 排序数组中查找元素第一个和最后一个位置相关的知识,希望对你有一定的参考价值。

 

   这题恶心人在你需要设计一个时间复杂度在O(logn)的算法,看到logn基本就能想到是二分法了,但是怎么二分呢。因为整个nums是按照升序已经排列好的,所以我们可以通过mid = (left+right )/2的方式得到。其中,在第一轮的时候left=0而right = len(nums)。这里len的时间复杂度是O(1)。

  那么所谓的二分法可以通过递归实现,每次通过比较目标值和左右边界值的大小,在左右区间进行搜索。

  

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:       
        def BinarySearch(l,r,ans):
            if l<=r:
                mid=(l+r)//2
                if nums[mid]==target:
                    ans.append(mid)
                if nums[l]<=target<=nums[mid]:
                    BinarySearch(l,mid-1,ans)
                if nums[mid]<=target<=nums[r]:
                    BinarySearch(mid+1,r,ans)
            return ans
        ans=BinarySearch(0,len(nums)-1,[])
        if len(ans)==0:
            return [-1,-1]
        else:
            return [min(ans),max(ans)]

  bs函数中三个参数为别为左下标右下标和当前数组。如果中间的mid是target了,那么在ans中讲mid加入进去,否则根据target的大小选择在mid左右两侧进行搜索。

以上是关于leetcode 34 排序数组中查找元素第一个和最后一个位置的主要内容,如果未能解决你的问题,请参考以下文章

算法leetcode|34. 在排序数组中查找元素的第一个和最后一个位置(rust重拳出击)

[LeetCode]34. 在排序数组中查找元素的第一个和最后一个位置(二分)

[leetcode] 34. 在排序数组中查找元素的第一个和最后一个位置(Java)

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置