问题分析
问题的可递归化要求其子问题与父问题一致。我们观察不难得出利用二分查找,可将数组划分为两个类型。一个为按照生序排序好的数组,而另一个为与源问题相同的旋转数组。我们可知其解位于roated数组当中。
代码
class Solution {
public:
int binaryFindMin(vector<int>& nums, int l, int r){
int mid = (l + r) / 2;
if(r - l <= 1)
return min(nums[l], nums[r]);
if(nums[mid] < nums[mid - 1]) // early return
return nums[mid];
if(nums[mid] > nums[l]) // left is sorted
return binaryFindMin(nums, mid, r);
return binaryFindMin(nums, l, mid); // left not sorted
}
int findMin(vector<int>& nums) {
return min(nums[0], binaryFindMin(nums, 0, nums.size() - 1));
}
};