Q:
给定一个按照升序排列的整数数组 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] if nums[0] <= target and nums[-1] >= target: left, right = 0, length - 1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: right = left = mid while left - 1 >= 0 and nums[left - 1] == target: left -= 1 while right + 1 <= length - 1 and nums[right + 1] == target: right += 1 return [left, right] elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return [-1, -1]
