Given an array of integers 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]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
这题的意思就是,给你一个排序好的数组和一个数字,让你返回这个数字在数组里第一次和最后一次出现的下标。
这题就是典型的二分查找,二分查找的first position与last position是有模板的:
class Solution(object):
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
if not nums:
return -1,-1
left, right = -1, -1
start, end = 0, len(nums)-1 #找第一个位置
while (start < end):
mid = (start + end)//2
# print(mid)
if (nums[mid] < target):
start = mid + 1
else:
end = mid
if (nums[start] == target):
left=start
start, end = 0, len(nums)-1 #找最后一个位置
while (start < end):
mid = (start + end+1) //2
# print(mid)
if (nums[mid] > target):
end = mid -1
else:
start = mid
if (nums[end] == target):
right=end
return left, right
s=Solution()
print(s.searchRange([2,2],2))