LeetCode34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)

题目描述

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。

在这里插入图片描述

思路

详见链接

代码

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        size = len(nums)
        if size == 0:
            return [-1,-1]
        first_position = self.__find_first_position(nums,size,target)
        if first_position == -1:
            return [-1,-1]
        last_position = self.__find_last_position(nums,size,target)
        return [first_position, last_position]

    def __find_first_position(self,nums,size,target):
        left = 0
        right = size - 1
        while left < right:
            mid = (left + right) >> 1
            if nums[mid] < target:
                left = mid + 1
            else:
                right = mid
        if nums[left] == target:
            return left
        else:
            return -1
    def __find_last_position(self,nums,size,target):
        left = 0
        right = size - 1
        while left < right:
            mid = (left + right + 1) >> 1
            if nums[mid] > target:
                right = mid - 1
            else:
                left = mid
        return left
发布了173 篇原创文章 · 获赞 505 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_37763870/article/details/104978395