思路:
这道题其实有点坑的。那就是如果数组李曼有重复值情况。比如3,1,1,2,2,2,2,2这种情况,这道题无疑就是用二分来做,只需要查找数组最后一个元素的分界线即可,但就是怕出现上面那种特殊的情况,这里的做法就是把要比较分界线末尾的元素再往前挪一位,用前一位去找分界线,如果前一位还有重复值,那么继续往前挪即可。
代码:
class Solution {
public:
int minArray(vector<int>& numbers) {
int i = 0, j = numbers.size() - 1;
while (i < j) {
int m = (i + j) / 2;
if (numbers[m] > numbers[j]) i = m + 1;
else if (numbers[m] < numbers[j]) j = m;
else j--;
}
return numbers[i];
}
};