153. 寻找旋转排序数组中的最小值
题目描述
解题思路
还是二分查找,在常规二分查找中,序列有序,在此题中分段有序。如果以中点为分割点,一定有一半是有序的,据此可以判断最小值点的区间。
代码实现
class Solution:
def findMin(self, nums: List[int]) -> int:
low, high = 0, len(nums) - 1
while low < high:
mid = low + (high - low) // 2
if nums[high] > nums[mid]:
# [high, mid]是连续递增区间,最小值不可能在此区间
high = mid
else:
# nums[high] <= nums[mid]时,最小值一定在[mid + 1, high]区间
# 不能是low = mid,会陷入死循环
low = mid + 1
return nums[low]