搜索范围

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

你的算法时间复杂度必须是 O(log n) 级别。


如果数组中不存在目标值,返回 [-1, -1]

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]

示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
 
 
class Solution(object):

    def searchRange(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        length = len(nums)
        if length == 0:
            return [-1, -1]
        low = 0
        high = length - 1
        #用循环代替递归
        #找最左边
        while low < high:
            mid_index = (low + high) // 2
            if target > nums[mid_index]:
                low = mid_index + 1
            else:
                high = mid_index

        if nums[low] != target:
            return [-1, -1]
        left = low

        low = 0
        high = length - 1
        #找最右边
        while low < high:
            mid_index = (low + high) // 2 + 1
            if target < nums[mid_index]:
                high = mid_index - 1
            else:
                low = mid_index

        right = low
        return [left, right]





猜你喜欢

转载自blog.csdn.net/qq_36325159/article/details/80150959
今日推荐