美文网首页
06_旋转数组的最小数字

06_旋转数组的最小数字

作者: NWPU_HaiboWu | 来源:发表于2019-08-15 22:19 被阅读0次

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()这个函数,先升序排列,然后返回首元素

  1. 对于一个数组,如果是正常在中间翻转:
      对比,如果前一个元素比后一个元素大,则这个是旋转点,返回后一个元素
    如果是整体翻转、或者全体元素都一样:
    返回首元素
    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.二分查找在非严格递增/递减数组中如何操作

相关文章

网友评论

      本文标题:06_旋转数组的最小数字

      本文链接:https://www.haomeiwen.com/subject/ktatsctx.html