Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., [0,1,2,4,5,6,7]
might become [4,5,6,7,0,1,2]
).
Find the minimum element.
You may assume no duplicate exists in the array.
Example 1:
Input: [3,4,5,1,2]
Output: 1
Example 2:
Input: [4,5,6,7,0,1,2]
Output: 0
1 Iteration
class Solution:
def findMin(self, nums: 'List[int]') -> 'int':
l, r = 0, len(nums) - 1
while l < r:
mid = (l+r)//2
if nums[mid] < nums[r]:
r = mid
elif nums[mid] > nums[r]:
l = mid + 1
else:
r -= 1
return nums[l]
2 Recursion
class Solution:
def findMin(self, nums: 'List[int]') -> 'int':
def recursion(nums, l, r):
if l < r:
mid = (l+r)//2
if nums[mid] < nums[r]:
r = mid
elif nums[mid] > nums[r]:
l = mid + 1
else:
r -= 1
return recursion(nums, l, r)
else:
return nums[l]
return recursion(nums, 0, len(nums) - 1)