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

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

题目:

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

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

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

思路:二分法,使用一个指针来找到数字的开头和结尾位置

程序:

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        result = [-1,-1]
        length = len(nums)
        head = 0
        tail = length - 1
        while head < tail:
            middle = (head + tail) // 2
            if target > nums[middle]:
                head = middle + 1
            else:
                tail = middle
        if nums[head] != target:
            return result
        result[0] = head
        tail = length - 1
        while head <= tail:
            middle = (head + tail) // 2
            if target >= nums[middle]:
                head = middle + 1
            else:
                right = middle
        result[1] = head - 1
        return result