#输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。如:[3,4,5,1,2]为[1,2,3,4,5]的一个旋转
arr1 = [3,4,5,6,1,2]
arr2 = [1,0,1,1,1] #测试特殊情况
#可以使用二分查找法
def min_reverse(arr):
i1,i2 = 0,len(arr)-1
mid = i1 #设置mid=初始值,方便在数组本不需要排序的时候,arr[i1]<arr[i2],直接返回首个元素
while(arr[i1] >= arr[i2]):
if i2-i1 == 1:
mid = i2
break
mid = int((i1+i2)/2)
if arr[i1] == arr[mid] & arr[i2] == arr[mid]:
return rev_order(arr,i1,i2)
if arr[mid] >= arr[i1]:
i1 = mid
elif arr[mid] <= arr[i2]:
i2 = mid
return arr[mid]
#特殊情况,顺序查找找到最小值
def rev_order(arr,index1,index2):
result = arr[index1]
for i in range(index1+1,index2):
if result > arr[index1+1]:
result = arr[index1+1]
# print(result)
return result
#print('旋转数组最小值',min_reverse(arr1))
找到旋转递增数组的最小值--python
最新推荐文章于 2020-08-22 17:26:20 发布