LeetCode热题100-在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组
nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值
target,返回[-1, -1]。你必须设计并实现时间复杂度为
O(log n)的算法解决此问题。
思路:找左边界就让等于target的放到right上一直逼近target的起始位置,直到左右边界left大约right后,left就是左边界。右边界相似。
- 找左边界:遇到
nums[mid] < target就往右走,否则往左走 - 找右边界:遇到
nums[mid] <= target就往右走,否则往左走
class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]: n = len(nums) left, right = 0, n - 1 while left <= right: mid = (left + right) // 2 if nums[mid] < target: left += 1 else: right -= 1 frist = left left = 0 right = n - 1 while left <= right: mid = (left + right) // 2 if nums[mid] <= target: left += 1 else: right -= 1 last = right if frist <= last: return [frist, last] else: return [-1, -1]