剑指offer 08 旋转数组的最小数字

来源:互联网 发布:diagbox软件下载 编辑:程序博客网 时间:2024/06/06 03:53

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

思路:

1.当midindex<leftindex时,最小数字在左边


2.当midindex>rightindex时,最小数字在右边


3.当leftindex==rightindex==midindex时,最小数字不能判断在左边还是在右边


class Solution:    def minNumberInRotateArray(self, rotateArray):        # write code here        if len(rotateArray) == 0:            return 0        leftindex = 0        rightindex = len(rotateArray) - 1        midindex = leftindex        while rotateArray[leftindex] >= rotateArray[rightindex]:            if rightindex - leftindex == 1:                 return rotateArray[rightindex]            midindex = int((leftindex + rightindex) / 2)            if rotateArray[rightindex] == rotateArray[leftindex] and                rotateArray[rightindex] == rotateArray[midindex]:                minnum = rotateArray[leftindex]                for tmp in rotateArray[leftindex + 1:rightindex + 1]:                    if tmp < minnum:                        minnum = tmp                return minnum            elif rotateArray[midindex] >= rotateArray[leftindex]:                leftindex = midindex            elif rotateArray[midindex] <= rotateArray[rightindex]:                rightindex = midindex                    return rotateArray[midindex]