Suppose a sorted array 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.
递归
class Solution {
public:
int findMin(vector<int> &num) {
int n = num.size() - 1;
if(num.size() == 1 || num[0] < num[n]) return num[0];//先考虑特殊情况
return find(0,n,num);
}
int find(int first,int end,vector<int> &num){
int mid = (first + end)/2;
if(num[mid] < num[mid - 1] && num[mid] <= num[end])
return num[mid];
if(num[mid] >= num[first] && num[mid] >= num[end])
return find(mid + 1,end,num);
else return find(first,mid - 1,num);
}
};二分法
class Solution {
public:
int findMin(vector<int> &num) {
int n = num.size() - 1;
int first = 0,end = n;
while(first <= end){
int mid = (first + end)/2;
if(num[mid] > num[n])
first = mid + 1;
else
end = mid - 1;
}
return num[first];
}
};
寻找旋转排序数组最小元素
本文介绍了一种高效算法来查找未知旋转点的排序数组中的最小元素。通过递归和二分查找法实现,适用于不含重复元素的情况。
330

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



