题目
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路
遍历数组寻找数组最小值。
解答
方法一
class Solution:
def minNumberInRotateArray(self, rotateArray):
minnum = 0
if len(rotateArray) == 0:
return minnum
for i in range(len(rotateArray)):
if minnum < rotateArray[i] and minnum != 0:
continue
else:
minnum = rotateArray[i]
return minnum
思路
利用非减排序
最小值一定比前面的要小
二分法查找数据,找左右:右边大于中值,最小值在左边
方法二
class Solution:
def minNumberInRotateArray(self, rotateArray):
if len(rotateArray) == 0:
return 0
l = 0
r = len(rotateArray)-1
while l <= r:
mid = (l + r) >> 1
if rotateArray[mid] < rotateArray[mid-1]:
return rotateArray[mid]
elif rotateArray[mid] < rotateArray[r]:
r = mid-1
else:
l = mid+1
return 0