题解 | #旋转数组的最小数字# 二分法
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
// leetcode里似乎见过这个
// 和BM19 寻找峰值 是相通的
class Solution {
public:
//
int minNumberInRotateArray(vector<int> rotateArray) {
int n = rotateArray.size();
int left = 0, right = n-1;
while(left<right)
{
int mid = (right+left)/2;
if(rotateArray[mid]>rotateArray[right]) // 都跟最右侧指针的值比较
{
left = mid+1; // mid 位于前面 最小值一定在右侧
}
else if (rotateArray[mid]<rotateArray[right])
{
right = mid; // 最小值可能是它 也可能左侧
}
else // 注意 相邻两个元素可能是相等的
{
// [mid] == [n-1]
right--; // 两者都有可能
}
}
return rotateArray[right];
}
};
查看11道真题和解析