旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
分析
旋转数组有两个单调区间在每个单调区间内,都是递增的。右边的单调区间整体偏小。因此,若中间的数大于最右边的那个数。说明中间的那个数在左单调区间内。因此就可以确定最小值一定在中间的那个数的右边。其余同理。
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rArr):
if not rArr:
return 0
low,hi = 0,len(rArr)-1
while low<hi :
mid = low + (hi-low)/2 #py3 must //
if rArr[mid]<rArr[hi]:
hi = mid
elif rArr[mid]>rArr[hi]:
low = mid +1
else:
hi-=1
return rArr[low]
arr = list(map(int,raw_input().split())) #py3 input
so = Solution()
print so.minNumberInRotateArray(arr) 
京公网安备 11010502036488号