在排序和旋转的数组中找到最小元素
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
。
问题: 一个有不同元素的排序数组 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
。