题解 | #旋转数组的最小数字#
旋转数组的最小数字
http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
二分
二分时每次与右端点进行判断,注意相等的时候,右端点减一处理。
此外不能与左端点击进行比较。
情况1 :1 2 3 4 5 , arr[mid] = 3. target = 1, arr[mid] > target, 答案在mid 的左侧。
情况2 :3 4 5 1 2 , arr[mid] = 5, target = 3, arr[mid] > target, 答案却在mid 的右侧。
所以不能把左端点当做target。
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
int l = 0, r = rotateArray.size() - 1;
while (l < r) {
int mid = (l + r) / 2;
if (rotateArray[mid] < rotateArray[r]) {
r = mid;
} else if (rotateArray[mid] > rotateArray[r]) {
l = mid + 1;
} else {
r--;
}
}
return rotateArray[r];
}
};