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]
查找目标数字在列表中最开始的位置和最后的位置,如果不存在则返回-1,很容易理解。
直接用index去做很容易。
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
try:
a=nums.index(target)
b=len(nums)-1-nums[::-1].index(target)
return [a,b]
except:
return [-1,-1]
或者用二分查找做这道题。注意二分查找的写法。最后比较的是nums[l]和target。
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
length=len(nums)
if length==0:return [-1,-1]
l, r= 0, length-1
a,b=0,0
while l<r:
m=(l+r)//2
if nums[m]<target:l=m+1
else:r=m
if nums[l]==target:a=l
else:return [-1,-1]
for i in range(a,length):
if nums[i]==target:
b=i
else:break
return [a,b]