给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
用非寻找左右边界实现
思路:
若数组本身为空自然不存在目标值,先判断边界条件。
设置一个空列表temp,若数组中含该目标值则添加进temp中
- 若temp空返回[-1,-1]
- 若temp不为空
- 若temp长度为1,即temp中仅含一个元素,则返回的上下界均为该元素的位置
- 若temp长度不为空,说明数组中含有多个目标值元素,且已知该数组有升序,则数组中出现的多个目标值必为连续的,temp的长度为目标值出现在数组中的次数,则返回的右界只需在左界上 + len - 1即可
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
temp = []
if nums == [] :
return [-1,-1]
for i in nums:
if i == target :
temp.append(i)
if temp == [] :
return [-1, -1]
elif temp != [] and len(temp) == 1 :
return [nums.index(temp[0]), nums.index(temp[0])]
elif temp != [] and len(temp) !=1 :
n = len(temp)
return [nums.index(temp[0]), nums.index(temp[0]) + n - 1]
看了下官方答案用的二分查找寻找左右边界,虽然有点长但是很清楚,知识更巩固一些