美文网首页
11. 旋转数组的最小数字

11. 旋转数组的最小数字

作者: oneoverzero | 来源:发表于2020-02-01 14:48 被阅读0次

题目描述:

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

代码:

class Solution:
    def minNumberInRotateArray(self, rotateArray):
        if not rotateArray:
            return 0
        lo, hi = 0, len(rotateArray)-1
        while lo < hi:
            mid = (lo + hi) // 2
            if rotateArray[mid] < rotateArray[hi]:
                hi = mid
            else:
                lo = mid + 1
        return rotateArray[lo]

注:
为了能够最终统一返回 rotateArray[lo]while 循环中的判断语句应该写成:

if rotateArray[mid] < rotateArray[hi]:
    hi = mid
else:
    lo = mid + 1

而不是:

if rotateArray[mid] > rotateArray[lo]:
    lo = mid
else:
    hi = mid - 1

因为整个过程是二分查找,所以 while 循环的判断条件写索引的上下边界就可以了,即 lo < hi

相关文章

网友评论

      本文标题:11. 旋转数组的最小数字

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