题目
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。如【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