61. 搜索区间
给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。
如果目标值不在数组中,则返回[-1, -1]
样例
给出[5, 7, 7, 8, 8, 10]
和目标值target=8
,
返回[3, 4]
挑战
时间复杂度 O(log n)
解题思路:
利用二分查找,找到target的起始位置,然后再向右寻找,找到结束位置。如果数组中没有target,就返回-1,
class Solution:
"""
@param A: an integer sorted array
@param target: an integer to be inserted
@return: a list of length 2, [index1, index2]
"""
def searchRange(self, A, target):
# write your code here
n = len(A)
if n == 0:
return [-1, -1]
#先利用二分查找,找到起始位置
index = self.binarySearch(A, target)
start = end = index
for j in range(index+1, n):
if A[j] == target:
end = j
return [start, end]
def binarySearch(self, nums, target):
left,right=0, len(nums)-1
while left+1 < right:
mid=int((left+right)/2)
if nums[mid] < target:
left=mid
else:
right=mid
print(left, right)
if nums[left]==target:
return left
elif nums[right]==target:
return right
return -1