154. 寻找旋转排序数组中的最小值 II
1.题目
2.官方的解决方案
class Solution:
def findMin(self, nums: List[int]) -> int:
left, right = 0, len(nums) - 1
while left < right:
mid = (left + right) // 2
if nums[mid] < nums[right]: # 右半部分有序,最小值 一定 在左半部分(可能是mid)
right = mid
elif nums[mid] > nums[right]: # 左半部分有序,最小值 可能 在右半部分
left = mid + 1
else:
right -= 1 # nums[mid]和nums[right]相等时,不能确定最小值在左部分还是右部分,所以就将这个重复的值抛弃,right-1
return nums[left]
- 时间复杂度: O ( l o g n ) O(logn) O(logn)
- 空间复杂度: O ( 1 ) O(1) O(1)