在排序数组中查找元素的第一个和最后一个位置。给定一个按照升序排列的整数数组 nums
,和一个目标值 target
。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]
。
示例 1:
1 |
|
示例 2:
1 |
|
思路一
首先通过二分查找找到起始位置:
- 如果
nums[mid] < target
,则表示起始位置在mid
的右边l = mid + 1
; - 如果
nums[mid] > target
,则表示起始位置在mid
的左边h = mid - 1
; - 如果
nums[mid] = target
,则表示起始位置就在mid (h = mid)
或者在mid
的左边
故 2 和 3 可以合并,即当 nums[mid] >= target
时,h = mid
。
然后通过二分查找找到终止位置,方法与上述类似。
时间复杂度 $O(\log n)$,空间复杂度 $O(1)$。
1 |
|