leetcode(18)-在排序数组中查找元素
Posted 李志琦的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
官方题解
一个二分找最大右,一个二分找左
以上是关于leetcode(18)-在排序数组中查找元素的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode习题——在排序数组中查找元素的第一个和最后一个位置(二分查找)
Leetcode——在排序数组中查找元素的第一个和最后一个位置
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 c++/java详细题解
LeetCode | 0034. 在排序数组中查找元素的第一个和最后一个位置Python