在排序和旋转的数组中找到最小元素

Find the minimum element in a sorted and rotated array

问题: 一个有不同元素的排序数组 A[ ] 在某个未知点旋转,任务是找到其中的最小元素。

预期时间复杂度:O(Log n)
我的代码:

def binarySearch(arr, n): 
    s = 0
    e = n-1
    while e >= s: 
        mid = (s+e) // 2
        if e==s:
            return arr[e]
        if mid == s and arr[mid] < arr[mid+1]:
            return arr[mid]
        elif mid == e and arr[mid] < arr[mid-1]:
            return arr[mid]
        elif arr[mid] < arr[mid - 1] and arr[mid] < arr[mid+1]:
            return arr[mid]
        elif arr[mid] < arr[e]:
            e = mid - 1
        else:
            e = mid + 1

当我使用数组 = [10, 20, 30, 40, 50, 5, 7] 时,我得到答案 = 10,而它应该是 5。
错误可能是什么?
编辑:按照答案,我还必须添加以下行来考虑剩下的一个案例

if e==s:
    return arr[e]

这是否只涉及普通的二分查找?

def binarySearch(arr, n): 
    s = 0
    e = n-1
    while e >= s: 
        mid = (s+e) // 2
        if e == s:
            return arr[e]
        elif mid == s and arr[mid] < arr[mid+1]:
            return arr[mid]
        elif mid == e and arr[mid] < arr[mid-1]:
            return arr[mid]
        elif arr[mid] < arr[mid - 1] and arr[mid] < arr[mid+1]:
            return arr[mid]
        elif arr[mid] < arr[e]:
            e = mid - 1
        else:
            s = mid + 1

我认为你的最后一行应该是 s = mid + 1 而不是 e = mid + 1