蜗牛慢爬的李成广 2020-01-06
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是?O(log n) 级别。
如果数组中不存在目标值,返回?[-1, -1]。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二分查找,然后再递归二分查找[head,mid-1],[mid+1,tail],结果绝世[right_1,right_2],mid,[left_1,left_2]的结果中的合法最大值
class Solution: def searchRange(self, nums, target: int): if len(nums)==0:return [-1,-1] head = 0 tail = len(nums)-1 find = None while head<=tail: mid = (head+tail)//2 if nums[mid]<target:head = mid+1 elif nums[mid]>target:tail = mid-1 else: find = mid break if find is None:return [-1,-1] ans = [mid,mid] left = self.searchRange(nums[head:mid],target) ans[0] = left[0]+head if left[0]>0 else ans[0] right = self.searchRange(nums[mid+1:tail+1],target) ans[1] = right[1]+mid+1 if right[0]>0 else ans[1] return ans
一个二分找最大右,一个二分找左