leetcode(18)-在排序数组中查找元素

蜗牛慢爬的李成广 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

官方题解

一个二分找最大右,一个二分找左

相关推荐