34. Search for a Range (两次二分查找)
Given an array of integers
nums
sorted in ascending order, find the starting and ending position of a given target
value.Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
.
Example 1:
Input: nums = [5,7,7,8,8,10]
, target = 8
Output: [3,4]
Example 2:
Input: nums = [5,7,7,8,8,10]
, target = 6 Output: [-1,-1]
class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]: n = len(nums) if n <=0: return [-1,-1] lo = 0 hi = n-1 while lo <= hi: mid = lo + (hi-lo)//2 if target > nums[mid]: lo = mid + 1 elif target < nums[mid]: hi = mid - 1 else: hi = mid - 1 a1 = lo lo = 0 hi = n-1 while lo <= hi: mid = lo + (hi-lo)//2 if target > nums[mid]: lo = mid + 1 elif target < nums[mid]: hi = mid - 1 else: lo = mid + 1 a2 = lo-1 if nums[a2] != target: return [-1,-1] return [a1,a2]