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

旋转数组的最小数字

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

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param rotateArray int整型一维数组 
# @return int整型
#
class Solution:
    def minNumberInRotateArray(self , rotateArray: List[int]) -> int:
        # write code here
        # return min(rotateArray) 直接调用函数
        # 二分查找时间复杂度为O(logn)
        left = 0
        right = len(rotateArray) - 1
        if rotateArray[left] < rotateArray[right]: # 如果是排好序的数组,直接返回第一个值
            return rotateArray[left]
        while left < right:
            if right - left == 1:
                break
            mid = (left + right) // 2
            if rotateArray[left] == rotateArray[right] and rotateArray[left] == rotateArray[mid]:
                # 对应[1,0,1,1,1]和[1,1,1,0,1]无法判定中间元素是属于前数组还是后数组的时候,顺序查找
                return self.minInorder(rotateArray, left, right)
            if rotateArray[mid] >= rotateArray[left]: # 注意等于号,中间值在前递增数组,最小值在后半段
                left = mid
            elif rotateArray[mid] <= rotateArray[right]: # 注意等于号,中间值在后递增数组,最小值在前半段
                right = mid
        return rotateArray[right]
    def minInorder(self, array, left, right):
        result = array[left]
        for i in range(len(array)):
            if result > array[i]:
                result = array[i]
        return result
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:55
点赞 评论 收藏
分享
07-11 11:10
门头沟学院 Java
请问各位大三兄弟们跟hr说多久实习时间到时候可以提前跑路吗?
程序员小白条:问就是六个月以上,可以一年,实习都这样,你入职后想跑就跑
点赞 评论 收藏
分享
07-01 23:23
郑州大学 Java
否极泰来来来来:牛客迟早有高三的
点赞 评论 收藏
分享
积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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