思路
本题 和 前置知识2 中的 实战:【二分2】二分找下标问题 没有本质区别,先搞懂那个题即可。 #code-switcher
class Solution:
def find_first_position(self, nums: List[int], target: int) -> int:
n = len(nums)
left, right = 0, n - 1
现有一个按非递减顺序排列的整数数组 nums,以及一个待查找的整数 target。请确定 target 在数组中第一次出现和最后一次出现的下标位置。
如果 target 没有出现在数组中,返回 [-1, -1]。
要求所实现的算法时间复杂度为 O(logn)。
约束条件:
nums 按非递减顺序排列。输入包含两个参数:
nums:一个按非递减顺序排列的整数数组。target:需要查找的目标整数。返回一个包含两个整数的列表 [first, last],其中 first 是 target 第一次出现的下标,last 是 target 最后一次出现的下标。如果 target 不存在于数组中,则返回 [-1, -1]。
输入
0
5
输出
-1 -1
说明
数组长度为 0,没有任何元素,因此目标值 5 不会出现在数组中。
起始位置和结束位置均为 -1,所以输出 -1 -1。
输入
1
7
7
输出
0 0
说明
数组只包含一个元素 7,目标值也是 7。
目标值第一次出现和最后一次出现的下标都是 0,因此输出 0 0。
输入
7
-3 -1 -1 0 2 2 2
2
输出
4 6
说明
在数组 [-3, -1, -1, 0, 2, 2, 2] 中,目标值 2 第一次出现在下标 4,最后一次出现在下标 6。
因此起始位置为 4,结束位置为 6,输出 4 6。
输入
5
1 2 3 4 5
10
输出
-1 -1
说明
数组 [1, 2, 3, 4, 5] 中的所有元素都小于目标值 10。
因此目标值不存在于数组中,返回 -1 -1。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册