Problem: 153. 寻找旋转排序数组中的最小值
题目要求logn,那大概率就是二分了
旋转数组,就会从二分变成另外一种形式:
A[mid] >= A[l] : 左边有序,那么min就可能是A[l]
A[mid] <= A[r] : 右边有序,那么min就可能是A[mid]
Code
class Solution:
# 153. 寻找旋转排序数组中的最小值
def findMin(self, nums: List[int]) -> int:
l, r = 0, len(nums) - 1
_min = 10 ** 4
while l <= r:
mid = (l + r) // 2
# _min = min(_min,nums[l],nums[mid],nums[r])
if nums[mid] >= nums[l]:
# 左边有序,右边无序
_min = min(_min,nums[l])
l = mid + 1
else:
# 左边无序,右边有序
_min = min(_min,nums[mid])
r = mid - 1
return _min