题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0
方法一:利用python的min和index函数
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
#首先判断rotateArray是否有元素
if len(rotateArray)==0:
return None
if len(rotateArray)==1:
return rotateArray[0]
else:
mm=min(rotateArray)#找到rotateArray中的最小值
d=rotateArray.index(mm)#找到最小值的位置
return rotateArray[d]#返回最小值
方法二:二分查找法
一个常规的二分查找法:
def TwoSort(Array,key):
left=0
right=len(Array)-1
while left<=right:
mid = (left + right) >> 1
if Array[mid]<key:
left=mid+1
elif Array[mid]>key:
right=mid-1
else :
return mid
if __name__ == '__main__':
Array=[1,2,3,4,5,6,7,8]
mid=TwoSort(Array,1)
print(mid)
把二分查找法的思想应用到这道题上:
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
#二分法
if not rotateArray:
return None
left=0
right=len(rotateArray)-1
while left<=right:
mid=(left+right)>>1
if rotateArray[mid]<rotateArray[mid-1]:
return rotateArray[mid]
elif rotateArray[mid]<rotateArray[right]:
right=mid-1
else:
left=mid+1
return 0