给定一个按照升序排列的整数数组 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
官方题解
一个二分找最大右,一个二分找左
原文地址:https://www.cnblogs.com/Lzqayx/p/12157866.html
时间: 2024-10-08 06:28:08