牛客网链接:旋转数组的最小数字
典型的二分查找应用题目
代码1
class Solution {
public:
int findMin(vector<int>& nums) {
int low = 0;
int high = nums.size() - 1;
int middle = (low + high)/2;
if(nums[low] < nums[high])
return nums[low];
if((nums[low] == nums[middle]) && (nums[middle] == nums[high]))
return nums[0];
while(low < high)
{
if(nums[low] < nums[middle] )
{
low = middle;
}
else
{
high = middle;
}
middle = (low + high) / 2;
}
return nums[low + 1];
}
};
代码2
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
if(rotateArray.size()==0)
return 0;
int low = 0;
int high = rotateArray.size() - 1;
int middle = low;
int min = rotateArray[low];
while(rotateArray[low]>=rotateArray[high])
{
if((high - low)== 1)
{
min = rotateArray[high];
break;
}
middle = (low + high)/2;
if(rotateArray[middle]>=rotateArray[low])
low = middle;
else
high = middle;
}
return min;
}
};