![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0b4aec3cad6f79a3fa394de4f3641f83.png)
1 双指针
其实这种思路也不能叫双指针,主要思想是找转折点,是很容易想到的一种解法。
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
if(rotateArray.size()==0) return 0;
if(rotateArray.size()==1) return rotateArray[0];
int size = rotateArray.size();
int i = 0;
while(i<size)
{
if(rotateArray[i]>rotateArray[i+1])
break;
i++;
}
return rotateArray[i+1];
}
};
2二分法
参考:
力扣官方题解
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
int size = rotateArray.size();
if(size==0) return 0;
int l = 0;
int r = size-1;
while(l<r)
{
int mid = l + (r-l)/2;
if(rotateArray[mid]>rotateArray[r])
l = mid + 1; //可以确保mid肯定不是最小值,从后一位开始
else if (rotateArray[mid]<rotateArray[r])
r = mid; //无法确定mid是否是最小值,所以不能+1
else
r--; ///无法确定最小值在l到mid,还是mid到r,所以高位-1,对结果无影响,
}
return rotateArray[l];
}
};
STL 算法
1)先用sort() 函数排序,再输出第一个数;
2)用min_element () 算法返回容器中最小值的指针。
即return *min_element(rotateArray.begin(),rotateArray.end());