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