描述
给定一个按照升序排列的整数数组 nums
,和一个目标值 target
。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]
。
样例
样例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
样例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
这一题是上一题的升级版,要找到开始位置和结束位置,事实上只需要把上一题的代码稍微调整一下就行,换个顺序:
上一题答案链接:https://blog.csdn.net/wenqiwenqi123/article/details/116272727
class Solution:
def firstSearch(self, nums, target):
start,end=0,len(nums)-1
while start+1<end:
mid=start+(end-start)//2
if nums[mid]==target:
end=mid
if nums[mid] > target:
end = mid
if nums[mid]< target:
start=mid
if nums[start]==target:
return start
if nums[end]==target:
return end
return -1
def lastSearch(self, nums, target):
start, end = 0, len(nums) - 1
while start + 1 < end:
mid = start + (end - start) //2
if nums[mid] == target:
start = mid
if nums[mid] > target:
end = mid
if nums[mid] < target:
start = mid
if nums[end] == target:
return end
if nums[start] == target:
return start
return -1
"""
@param nums: the array of integers
@param target:
@return: the starting and ending position
"""
def searchRange(self, nums, target):
# Write your code here.
firstposition=self.firstSearch(nums,target)
lastposition=self.lastSearch(nums,target)
return [firstposition,lastposition]
nums = [5,7,7,8,8,10]
target = 8
s = Solution()
print(s.searchRange(nums, target))