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