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>& nums) {
int low=0,high=nums.size()-1,middle;
while(low<=high){ //low<=high
middle=(low+high)/2;
if(nums[middle]<nums[high]){
high=middle; //不是middle+1
}else if(nums[middle]>nums[high]){
low=middle+1;
}else{
return nums[high];
}
}
return nums[high];
}
};
代码更精简的版本:
class Solution {
public:
int findMin(vector<int>& nums) {
int low=0,high=nums.size()-1,middle;
//保证得到,low=middle+1
while(low<high){ //low<high
middle=(low+high)/2;
if(nums[middle]<=nums[high]){
high=middle; //不是middle+1,所以while条件时low<high
}else{
low=middle+1;
}
}
return nums[high];
}
};
本文介绍了一种高效算法来查找已知没有重复元素的旋转排序数组中的最小元素。通过对比中间元素与数组尾部元素的关系,逐步缩小搜索范围,最终定位到最小值的位置。提供两种实现方式,其中一种更为简洁。
364

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



