题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路:
1.当midindex<leftindex时,最小数字在左边
2.当midindex>rightindex时,最小数字在右边
3.当leftindex==rightindex==midindex时,最小数字不能判断在左边还是在右边
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
if len(rotateArray) == 0:
return 0
leftindex = 0
rightindex = len(rotateArray) - 1
midindex = leftindex
while rotateArray[leftindex] >= rotateArray[rightindex]:
if rightindex - leftindex == 1:
return rotateArray[rightindex]
midindex = int((leftindex + rightindex) / 2)
if rotateArray[rightindex] == rotateArray[leftindex] and
rotateArray[rightindex] == rotateArray[midindex]:
minnum = rotateArray[leftindex]
for tmp in rotateArray[leftindex + 1:rightindex + 1]:
if tmp < minnum:
minnum = tmp
return minnum
elif rotateArray[midindex] >= rotateArray[leftindex]:
leftindex = midindex
elif rotateArray[midindex] <= rotateArray[rightindex]:
rightindex = midindex
return rotateArray[midindex]