在排序并旋转的数组中查找最小元素



问题:具有不同元素的排序数组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

当我使用Array=[10,20,30,40,50,5,7]时,我得到的答案=10,而它应该是5
可能是什么错误
EDIT:在回答之后,我还必须添加以下行来考虑一个剩下的案例

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

最新更新