def getMin(arr, low, high):
if arr == None :
print('数组为空')
return
#判断数组元素值是否都相等
if high == (len(arr)-1):
suma = sum(arr)
sumb = arr[low] * len(arr)
if suma == sumb :
return arr[0]
#若旋转个数为0,返回头元素
if arr[high] < arr[low]:
return arr[0]
#数组只有一个元素时
if high == low :
return arr[high]
mid = (high +low)//2
#判断mid+1是否最小值
if arr[mid] > arr[mid+1] :
return arr[mid+1]
#判断mid是否最小值
elif arr[mid] < arr[mid-1] :
return arr[mid]
#最小值一定在数组右半部分
elif arr[high] < arr[mid]:
return getMin(arr, mid+1, high)
#最限制一定在数组左半部分
elif arr[low] > arr[mid]:
return getMin(arr, low, mid-1)
#无法确定最小值位置
else :
return min(getMin(arr, low, mid-1), getMin(arr, mid+1, high))
if __name__ == '__main__':
arr = [1,1,1,1]
print(getMin(arr, 0, len(arr)-1))
如何旋转数组
def rotateArr(arr, k):
k = k%len(arr)
arr = arr[-k:] + arr[:-k]
return arr
if __name__ == '__main__':
arr = [1,2,3,4,5]
print(rotateArr(arr,2))