题解 | #旋转数组的最小数字#

旋转数组的最小数字

http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba

二分法:
    low 与 mid 比较:
        两种情况:1、low > mid :此情况low不必再讨论,但是很可能low +1部分 是最小的。所以low +=1
                  2、low >=mid : 此情况low部分很可能是最小的,但是由于出现旋转,所以high很可能小于low,
                                    此时出现两种情况:
                                        1、low >high 则我们直接从右半部分考虑,直接low = mid +1
                                       2、low <high 那么我们考虑左半部分,因为很可能左半部分也有小于low的情况。  # -*- coding:utf-8 -*-
class Solution:
    def minNumberInRotateArray(self, rotateArray):
        if rotateArray == None&nbs***bsp;len(rotateArray) == 0:
            return None
        low = 0
        high = len(rotateArray) -1
        while low < high:
            mid = (low + high) >> 1
            if rotateArray[mid] > rotateArray[low]:
                if rotateArray[high] < rotateArray[low]:
                    low = mid +1
                else:
                    high -=1
                
            elif rotateArray[mid] < rotateArray[high]:
                high = mid
            else:
                low +=1
        return rotateArray[low]

全部评论

相关推荐

09-29 16:59
已编辑
门头沟学院 Java
牛客96609213...:疯狂背刺,之前还明确设置截止日期,还有笔试,现在一帮人卡在复筛,他反而一边开启扩招,还给扩招的免笔试,真服了,你好歹先把复筛中的给处理了再说
投递大疆等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务