Description:
题目大意:旋转数组中求最小值
解题思路:
算法标签:二分
- 求有序序列中最小值利用二分法
- 分别设置 left 和 right 指向最左端和最右端,mid 为 left 和 right 的中间值
- 如果 mid 的值大于 right,说明旋转点在[mid + 1,right] 区间上
- 如果 mid 的值小于 left,说明旋转点在[left , mid] 区间上
- 如果 mid 的值等于right,无法判断,right左移,缩小区间
代码:
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
if(rotateArray.size() == 0)
return 0;
int left = 0,right = rotateArray.size() - 1;
while(left < right) {
int mid = (left + right) >> 1;
// 如果中点大于right点,说明旋转点在[mid + 1,right]区间上
if(rotateArray[mid] > rotateArray[right])
left = mid + 1;
// 如果中点小于right点,说明旋转点在[left,mid + 1]区间上
else if(rotateArray[mid] < rotateArray[right])
right = mid;
// 否则缩小范围判断
else
right--;
}
return rotateArray[left];
}
};