1.题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0
2.思路
这个题真的把我恶心坏了,我试着用二分查找来写,怎么都不对,把我郁闷坏了,就先简单说一下我的三个思路吧
因为是python,所以有两个比较赖皮的思路
1.python中有min()这个函数,可以直接返回list中的最小值
2.python的list中有sort()这个函数,先升序排列,然后返回首元素
- 对于一个数组,如果是正常在中间翻转:
对比,如果前一个元素比后一个元素大,则这个是旋转点,返回后一个元素
如果是整体翻转、或者全体元素都一样:
返回首元素
4.我看讨论区里有二分查找的算法,但我还是没整出来,回头再想想
3.实现
def minNumberInRotateArray1(rotateArray):
if not rotateArray:
return 0
return min(rotateArray)
def minNumberInRotateArray2(rotateArray):
if not rotateArray:
return 0
rotateArray.sort()
return rotateArray[0]
def minNumberInRotateArray(rotateArray):
if not rotateArray:
return 0
length=len(rotateArray)
for i in range(0,length-1):
if rotateArray[i]>rotateArray[i+1]:
return rotateArray[i+1]
return rotateArray[0]
4.相关知识点
1.python中a/b,如果不是整数,则会存为float类型,a//b保存为向下取整
2.二分查找在非严格递增/递减数组中如何操作
网友评论