找到旋转递增数组的最小值--python

#输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。如:[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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值