题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路
因为该数组为有序数组,因此题目本意二分查找查找最小值,对于二分查找这个有序数组来说,取两个标记指针,first和last分别对应数组的开始和末尾,最小值肯定会在末尾节点之前。通过不断的移动first和last,将值锁定在两个数之间。
附录
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
first=0
last=len(rotateArray)-1
while rotateArray[first]>=rotateArray[last]:
mid=int((first+last)/2)
if rotateArray[first]<=rotateArray[mid]:
first=mid
else:
last=mid
print(first)
print(last)
print("##############")
if last-first==1:
return rotateArray[last]
# write code here
if __name__=="__main__":
a=[6501,6828,6963,7036,7422,7674,8146,8468,9962,154,293,334,492,1323,1479,1539,1727,4605,4665,5725,6300,6335]
b=Solution()
print(b.minNumberInRotateArray(a))