06_旋转数组的最小数字

2019-08-15  本文已影响0人  NWPU_HaiboWu

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.二分查找在非严格递增/递减数组中如何操作

上一篇 下一篇

猜你喜欢

热点阅读