旋转数组的最小数字

题目

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。如【3, 4, 5,1,2】为【1, 2, 3, 4, 5】的一个旋转,求数组的最小值。

Python题解
def min_num_in_rotated_arr(arr):
    index_1 = 0
    index_2 = len(arr) - 1;
    index_mid = index_1
    while arr[index_1] >= arr[index_2]:
        if index_2 - index_1 == 1:
            index_mid = index_2
            break
        index_mid = (index_2 + index_1) / 2
        if arr[index_1] == arr[index_2] and arr[index_mid] == arr[index_1]:
            return helper(arr, index_1, index_2)
        if arr[index_mid] >= arr[index_1]:
            index_1 = index_mid
        elif arr[index_mid] <= arr[index_2]:
            index_2 = index_mid

    return arr[index_mid]


def helper(arr, index_1, index_2):
    res = arr[index_1]
    for index in xrange(index_1 + 1, index_2 + 1):
        if res > arr[index]:
            res = arr[index]
    return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值