• 题目要求:

image.png

  • 思路:

    • 二分查找,定义left,right,mid
    • 如果右边位置的数值大于中间,那么右边是排好序的数组,所以右边的最小值为mid的值,把mid赋给right,看看左边还有没有更小的
    • 其他:

      • 如果right位置的数值小于,也就是右边的数组包含未旋转的数组的前几个元素,left = mid + 1
      • 其他:right和mid位置的数值可能相等,把right - 1,去掉重复值
  • 核心代码:
left = 0
right = len(numbers) - 1
while left < right:
    mid = left + (right - left) // 2
    if numbers[right] > numbers[mid]:
        right = mid
    else :
        if numbers[right] < numbers[mid]:
            left = mid + 1
        else:
            right -= 1
return numbers[left]
  • 完整代码:
class Solution(object):
    def findMin(self, numbers):
        """
        :type numbers: List[int]
        :rtype: int
        """
        left = 0
        right = len(numbers) - 1
        while left < right:
            mid = left + (right - left) // 2
            if numbers[right] > numbers[mid]:
                right = mid
            else :
                if numbers[right] < numbers[mid]:
                    left = mid + 1
                else:
                    right -= 1
        return numbers[left]

Adrianna
1 声望2 粉丝