O(logN)做法,越发觉得感觉没必要剪枝。
没重复
/*
* @lc app=leetcode id=153 lang=cpp
*
* [153] Find Minimum in Rotated Sorted Array
*/
// @lc code=start
class Solution {
public:
int findMin(vector<int>& nums) {
int N = nums.size();
if(N<=0) return 0;
return bsearch(nums,0,N);
}
int bsearch(vector<int>& nums,int L,int R){
if(nums[L] <= nums[R-1]) return nums[L];
int mid = (L+R)/2;
if(nums[mid] > nums[L]) return bsearch(nums,mid,R);
return min(bsearch(nums,L,mid),bsearch(nums,mid,R));
}
};
// @lc code=end
有重复
/*
* @lc app=leetcode id=154 lang=cpp
*
* [154] Find Minimum in Rotated Sorted Array II
*/
// @lc code=start
class Solution {
public:
int findMin(vector<int>& nums) {
int N = nums.size();
if(N<=0) return 0;
return bisearch(nums,0,N);
}
int bisearch(vector<int>& nums,int L,int R){
if(L+1>=R) return nums[L];
if(nums[L] < nums[R-1]) return nums[L];
int mid = (L+R)/2;
return min(bisearch(nums,mid,R),bisearch(nums,L,mid));
}
};
// @lc code=end