旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
方法一:无任何意义,直接对数组求最小值
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
minnum = min(rotateArray)
return minnum
方法二:利用比较法,所有元素一一对比,找最小值,时间复杂度为O(n)
class Solution:
def minNumberInRotateArray(self, rotateArray):
# 判断每个元素,找出最小值
minnum = 0
for i in range(len(rotateArray)):
minnum = minnum if minnum < rotateArray[i] and minnum != 0 else rotateArray[i]
return minnum
方法三:在有序列表查找元素,可以利用二分法,需要注意的是确定边界条件。
1、如果中间元素的值小于它的左边值,则它是最小值;
2、如果中间值小于右边的值,则最小值在左边,否则在右边。
class Solution:
def minNumberInRotateArray(self, rotateArray):
left = 0
right = len(rotateArray)-1
if not rotateArray:
return 0
while left <= right:
mid = (left + right) // 2
if rotateArray[mid]<rotateArray[mid-1]:
return rotateArray[mid]
elif rotateArray[mid]<rotateArray[right]:
right = mid -1
else:
left = mid +1
return 0