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

这篇博客探讨了两种O(logN)时间复杂度的算法,用于在已旋转的有序数组中找到最小值。第一种情况是数组不包含重复元素,使用二分查找进行优化;第二种情况考虑了数组中存在重复元素的情况,同样应用了二分查找策略但进行了调整以处理重复值。
277

被折叠的 条评论
为什么被折叠?



