题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路:
思路1: 对于数组中的元素,两两比较,
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, array):
if len(array) ==0: #如果数组大小为0,则返回0
return 0
i=0
for i in range(len(array)): #遍历数组中的元素
if (array[i]>array[i+1]): #如果元素i大于下一个元素,则返回i+1元素,这样不断查找之后,数组的第一个元素是最小的
return array[i+1]
return array[0]
思路2: 二分查找法。找到左边起始游标,最右边起始游标
class Solution:
def minNumberInRotateArray(self, array):
if len(array) ==0:
return 0
left=0
right = len(array)-1
mid=-1
while(array[left]>array[right]):
if(right-left==1):
mid=right
break
mid=left+(right-left)/2
if(array[mid]>=array[left]):
left=mid
if (array[mid]<array[right]):
right=mid
return array[mid]
# 实例化
if __name__=='__main__':
array=[3,4,5,1,2]
demo = Solution()
print(demo.minNumberInRotateArray(array))
但是这个有点问题–没有结果出炉