153. Find Minimum in Rotated Sorted Array
Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example, the array nums = [0,1,2,4,5,6,7] might become:
ArrayExample 1:
- Input:
nums = [3,4,5,1,2] - Output:
1 - Explanation: The original array was
[1,2,3,4,5]rotated3times.
Example 2:
- Input:
nums = [4,5,6,7,0,1,2] - Output:
0 - Explanation: The original array was
[0,1,2,4,5,6,7]and it was rotated4times.
Example 3:
- Input:
nums = [11,13,15,17] - Output:
11 - Explanation: The original array was
[11,13,15,17]and it was rotated4times.
Constraints:
n == nums.length1 <= n <= 5000-5000 <= nums[i] <= 5000- All the integers of
numsare unique. numsis sorted and rotated between 1 andntimes.
Approach
Solution
class Solution:
def findMin(self, nums: List[int]) -> int:
l, r = 0, len(nums) - 1
lowest_index = -1
while l <= r:
m = (l + r) // 2
if nums[m] <= nums[-1]:
lowest_index = m
r = m - 1
else:
l = m + 1
return nums[lowest_index]