美文网首页
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