题目:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
示例:
输入:[3,4,5,1,2]
返回:1
解题1:暴力解法
直接遍历数组,找到最小值
代码:
class Solution:
def minNumberInRotateArray(self, rotateArray):
if not rotateArray:
return 0
if len(rotateArray)==0:
return 0
else:
for arr in rotateArray:
return min(rotateArray)
解题2:二分法求解
典型的运用二分法来求解,先找到重点mid值,然后跟数组最右端值进行对比,主要分为以下三种情况:
(1)arr[mid]>arr[right]
说明最小值在中间值右边,所以将start值设为mid
(2)arr[mid]<arr[right]
说明最小值在中间值左边,所以end值设为mid
(3)arr[mid]=arr[end]
最小值可能在左边也可能在右边,所以将end-1,一点点寻找
代码:
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
if not rotateArray:
return 0
if len(rotateArray) == 1:
return rotateArray[0]
start=0
end=len(rotateArray)-1
mid=int((start+end)/2)
while start<end:
if rotateArray[start]<rotateArray[end]:
return rotateArray[start]
if rotateArray[mid]>rotateArray[end]:
start=mid+1
if rotateArray[mid]<rotateArray[end]:
end=mid
else:
end=end-1
return rotateArray[start]