153. Find Minimum in Rotated Sorted Array - LeetCode
class Solution:
def findMin(self, nums: list[int]) -> int:
"""
check: nums[m] > nums[-1]
????????F
return first `F`
"""
l = 0 # first `?`
r = len(nums) - 1 # first `F`
# stop: TTT[F]FFF
while l < r:
m = (l + r) // 2
if nums[m] > nums[-1]:
l = m + 1
else:
r = m
return nums[r]
class Solution2:
def findMin(self, nums: list[int]) -> int:
"""
check: nums[m] >= nums[0]
T???????F
return first `F`
"""
# edge case: T???????T
if nums[0] <= nums[len(nums) - 1]:
return nums[0]
l = 0 # last `T`
r = len(nums) - 1 # first `F`
# stop: TTTT[F]FFF
while l < r:
# TTT?????F
# __l_____r
m = (l + r) // 2
if nums[m] >= nums[0]:
l = m + 1
else:
r = m
return nums[l]
class Solution3:
def findMin(self, nums: list[int]) -> int:
"""
check: nums[m] >= nums[0]
T???????F
return first `F`
"""
# edge case: T???????T
if nums[0] <= nums[len(nums) - 1]:
return nums[0]
l = 0 # last `T`
r = len(nums) - 1 # first `F`
# stop: TTT[TF]FFF
while r - l > 1:
# TTT?????F
# __l_____r
m = (l + r) // 2
if nums[m] >= nums[0]:
l = m
else:
r = m
return nums[r]