如何使用以下代码在经过排序和旋转的数组中找到最大元素?

问题描述 投票:-1回答:1

我知道有很多解决方案可以在已排序的旋转数组中找到最大值。但是下面是我的代码,我想修改这些代码以在所有输入上工作。目前在少数情况下,它不起作用。

[帮助我查找错误。如果需要任何修改,请告诉我。

#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。

python-3.x algorithm sorting binary-search
1个回答
0
投票

您的if开关将在子数组(在elseleft之间(包括)之间)完全上升时移到错误的一侧(right)。因此,您也应该检查该特定方案。

此操作在if中有附加条件:

        if arr[mid] > arr[right] or arr[left] < arr[right]:
© www.soinside.com 2019 - 2024. All rights reserved.