题目:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路:
二分查找分析见:数组在排序数组中出现的次数这道题(https://blog.youkuaiyun.com/qq_43208303/article/details/86705137)
需要注意的是:本题中我们直接将low和high=mid,而标准的二分查找是low = mid + 1,如果标准中也写成low=mid在遍历到最后只有两位的时候k在后位会卡死,所以加上退出条件是right = low + 1才能用。
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
if len(rotateArray) == 0:
return 0
elif rotateArray[0] < rotateArray[-1]:
return rotateArray[0]
p1 = 0
p2 = len(rotateArray) - 1
mid = 0
while(p1 < p2):
mid = p1 + (p2-p1)//2
if rotateArray[p1] <= rotateArray[mid]:
p1 = mid
else:
p2 = mid
if p2 == p1 + 1:
return rotateArray[p2]