寻找旋转排序数组中的最小值 II
画个图脑补一下
最坏时间复杂度:
class Solution {
public:
int findMin(vector<int>& a) {
int n = a.size();
int l = 0 , r = n-1;
while(l<r){ //l==r时就终止了,最小值就已找到了
int m = l+(r-l)/2;
// a[m] 和 a[r] 不在同一段
if(a[m]>a[r]){
l = m+1; // 最小值必然在mid的右边
// a[m] 和 a[r] 在同一段
}else if(a[m]<a[r]){
r = m; // 这里可不能写成 r = m -1; 因为 a[m]可能已经就是最小值了
// 未知
}else{
r--;
}
}
return a[l];
}
};