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.
解法1: Brute Force,直接迭代搜索。 T:O(n)
解法1: 二分法,Binary Search, T:O(logn)
显然二分法是要考察的,至于旋转数组的二分法与33. Search in Rotated Sorted Array类似。
Python:
class Solution(object):
def findMin(self, nums):
left, right = 0, len(nums)
target = nums[-1]
while left < right:
mid = left + (right - left) / 2
if nums[mid] <= target:
right = mid
else:
left = mid + 1
return nums[left]
Python:
class Solution2(object):
def findMin(self, nums):
left, right = 0, len(nums) - 1
while left < right and nums[left] >= nums[right]:
mid = left + (right - left) / 2
if nums[mid] < nums[left]:
right = mid
else:
left = mid + 1
return nums[left]
C++:
class Solution {
public:
int findMin(vector<int> &num) {
int left = 0, right = num.size() - 1;
if (num[left] > num[right]) {
while (left != (right - 1)) {
int mid = (left + right) / 2;
if (num[left] < num[mid]) left = mid;
else right = mid;
}
return min(num[left], num[right]);
}
return num[0];
}
};
类似题目:
[LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索
[LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索 II
[LeetCode] 154. Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值 II