Menu
CoddyTech

Find First and Last Position of Element in Sorted Array

中等二分查找python iconjava iconcpp iconc iconjs icon+10

给定一个按非递减顺序排序的整数列表 nums,因此某个值可以重复出现,以及一个整数 target。返回一个包含两个索引的列表,索引从 0 开始:target 第一次和最后一次出现的位置。如果列表中没有 target,则返回 [-1, -1]。时间复杂度尽量达到 O(log n)。

函数

searchRange(nums: integer-array, target: integer) → integer-array
numsinteger-array
有序的整数列表,其中的值可能会重复
targetinteger
要查找的值
返回值integer-array
target 的第一个和最后一个索引,如果不存在则为 [-1, -1]

约束条件

  • 1 ≤ nums.length ≤ 104
  • -104 ≤ nums[i], target ≤ 104
  • nums 按非递减顺序排列。

示例

输入
nums = [3, 5, 5, 5, 8, 9, 9, 12]target = 5
输出
[1, 3]
解释
3 个 5 分别位于索引 1、2 和 3,因此这一段从索引 1 开始,到索引 3 结束。索引 0 上是 3,索引 4 上是 8,因此这一段无法延伸得更远。
challenge icon

进阶

如果同一个列表要针对不同目标进行数千次查询,能不能提前遍历一次列表,让每次查询都比 O(log n) 更快?

重置代码
def searchRange(nums, target):
    # 在这里编写代码

测试 #1

测试 #2

参数

nums = [3, 5, 5, 5, 8, 9, 9, 12]
target = 5

预期输出

[1, 3]