leetcode(18)-在排序数组中查找元素
给定一个按照升序排列的整数数组 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
官方题解
一个二分找最大右,一个二分找左
相关推荐
数据与算法之美 2020-07-04
田有朋 2020-06-28
算法改变人生 2020-06-09
koushr 2020-11-12
jimeshui 2020-11-13
faiculty 2020-08-20
xhao 2020-06-29
wuxiaosi0 2020-06-28
路漫 2020-06-28
数据与算法之美 2020-06-28
xhao 2020-06-28
natloc 2020-06-27
leoaran 2020-06-22
nurvnurv 2020-06-07
shenwenjie 2020-06-04
Tips 2020-06-03
只能做防骑 2020-06-01
yuanran0 2020-05-13