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. 在排序数组中查找元素的第一个和最后一个位置