#leetcode34. 在排序数组中查找元素的第一个和最后一个位置
#给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始#位置和结束位置。
#如果数组中不存在目标值 target,返回 [-1, -1]。
#输入:nums = [5,7,7,8,8,10], target = 8;输出:[3,4]
class Solution(object):
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
def find_right(nums, target):
l, r =0, len(nums)-1
while l <= r:
mid = (l + r)//2
if target < nums[mid]:
r = mid - 1
elif target > nums[mid]:
l = mid + 1
elif ((mid==len(nums)-1 or nums[mid+1]>target) and nums[mid]==target):
return mid
else: #其他满足nums[mid]==target但是不满足nums[mid+1]>target
l = mid + 1
return -1
def find_left(nums, target):
l, r =0, len(nums)-1
while l <= r:
mid = (l + r)//2
if target < nums[mid]:
r = mid - 1
elif target > nums[mid]:
l = mid + 1
elif ((mid==0 or nums[mid-1]<target) and nums[mid]==target):
return mid
else: #其他满足nums[mid]==target但是不满足nums[mid-1]<target
r = mid - 1
return -1
left, right = find_left(nums, target), find_right(nums, target)
return [left, right]