问题遇到的现象和发生背景
leetcode题目,给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
示例 1:
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
示例 2:
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
问题相关代码,请勿粘贴截图
def findall(nums,target):
min=0
max=len(nums)
list=[-1,-1]
n=True
while max>=min and n:
mid=(max+min)//2
print(0)
if nums[mid]<target and nums[mid+1]<target:
min=mid+1
elif nums[mid]<target and nums[mid+1]==target:
list[0]=mid+1
elif nums[mid]==target and nums[mid+1]>target:
list[1]=mid
elif nums[mid]>target and nums[mid+1]>target:
max=mid-1
else:
min1=0
max1=mid
min2=mid
max2=len(nums)-1
a=True
b=True
while max1>=min1 and a:
mid1=(max1+min1)//2
print(2)
# print(max1,mid1,min1)
if mid+1<len(nums):
# print(max1, mid1, min1)
if nums[mid1] < target and nums[mid1 + 1] < target:
min1 = mid1+1
elif nums[mid1] < target and nums[mid1 + 1] == target:
list[0] = mid1 + 1
a=False
else:
max1=mid1-1
while max2>=min2 and b:
print(1)
mid2=(max2+min2)//2
if mid2+1<len(nums):
if nums[mid2] > target and nums[mid2 + 1] > target:
max2 = mid2
elif nums[mid2] == target and nums[mid2 + 1] > target:
list[1] = mid2
b=False
else:
min2=mid2+1
n=False
return list
运行结果及报错内容
输入print(findall([1,1,2,2,2,3,3,3,3,4,4,4,4],4))
结果一只循环
我的解答思路和尝试过的方法
我想要达到的结果
还是按照我的思路,帮忙看看是哪里出了问题