1.思路:
首先一看,一次遍历可以求得,时间复杂度为O(N),显然不是最佳答案,因此最佳答案时间复杂度为O(LOG(N)),所有得用二分法查找。由于该数组中存在重复数据,因此在查找时需要考虑(arr[left] == arr[mid])的情况,这时应该令left += 1,调整后再进行二分查找。
2.代码:
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
if(rotateArray.size() == 0) return 0;
int left = 0;
int right = rotateArray.size() - 1;
while(left < right) {
int mid = (left + right) / 2;
if(rotateArray[left] > rotateArray[mid]){
right = mid;
} else if(rotateArray[left] == rotateArray[mid]) {
left += 1; //关键操作
} else {
left = mid;
}
}
return rotateArray[left];
}
};