题目:
旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com)
思路:
这题我们可以通过一次次遍历来查找最小值
但是,这样效率太低,我们这里使用二分查找来实现这题
代码:
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray)
{
int left = 0;
int right = rotateArray.size() - 1;
int mid = (left + right) >> 1;
while( abs(left - right) > 1)
{
if(rotateArray[left] < rotateArray[right])//没有进行rotate,最小的在第一个
{
return rotateArray[left];
}
if(rotateArray[left] == rotateArray[mid] && rotateArray[mid] == rotateArray[right])
{
int result = rotateArray[left];
for(int i = left+1; i < right ; i++)
{
if(result > rotateArray[i])
{
result = rotateArray[i];
}
}
return result;
}
else
{
if(rotateArray[mid] >= rotateArray[left])
{
left = mid;
}
else
{
right = mid;
}
mid = (left+right) >> 1;
}
}
return rotateArray[right];
}
};