- 题目要求:
-
思路:
- 二分查找,定义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]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。