我知道有很多解决方案可以在已排序的旋转数组中找到最大值。但是下面是我的代码,我想修改这些代码以在所有输入上工作。目前在少数情况下,它不起作用。
[帮助我查找错误。如果需要任何修改,请告诉我。
#arr is the list of elements
#length is the length of the list
#left,right and mid indicates the different positions of the array
def find_max(arr,length):
left=0
right=length-1
while left<right :
if right-left==1 :
return max(arr[left],arr[right])
mid=(left+right)>>1
if arr[mid]>arr[right]:
left=mid
else:
right=mid-1
return arr[left]
此代码在以下输出中失败:arr = [5,6,7,1,1,2,3,4]
因为此输出为5,而应为7。
您的if
开关将在子数组(在else
和left
之间(包括)之间)完全上升时移到错误的一侧(right
)。因此,您也应该检查该特定方案。
此操作在if
中有附加条件:
if arr[mid] > arr[right] or arr[left] < arr[right]: