153. 寻找旋转排序数组中的最小值
class Solution:
def findMin(self, nums: List[int]) -> int:
# 二分搜索 O(logN)
# if len(nums) == 1:
# return nums[0]
# left = 0
# right = len(nums) - 1
#
# if nums[right] > nums[left]:
# return nums[0]
# while right >= left:
# mid = (right - left)//2 + left
# if nums[mid] > nums[mid + 1]:
# return nums[mid + 1]
# if nums[mid - 1] > nums[mid]:
# return nums[mid]
# if nums[mid] >= nums[left]:
# left = mid + 1
# else:
# right = mid - 1
# 二分搜索O(logN)
# 可有可无
if len(nums) == 1:
return nums[0]
left, right = 0, len(nums) - 1
# 可有可无
if nums[right] > nums[left]:
return nums[0]
while left < right:
mid = left + (right - left) // 2
if nums[mid] > nums[right]:
left = mid + 1
elif nums[mid] < nums[right]:
right = mid
return nums[left]
154. 寻找旋转排序数组中的最小值 II
class Solution:
def findMin(self, nums: List[int]) -> int:
#二分查找 O(logN)
left, right = 0, len(nums) - 1
while left < right:
mid = left + (right - left)//2
if nums[mid] > nums[right]:
left = mid + 1
elif nums[mid] < nums[right]:
right = mid
else:
right -= 1
return nums[left]