二分法。以右端点为对比目标
特殊情况 1 0 1 1 1 、 1 1 1 0 1 ,j --
返回值 : 一般是 j 下标的值,但 [1,2,2,2,2,2] 这种情况通过不了
class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) { if(rotateArray.size() ==0) return 0; int n = rotateArray.size(); int i = 0,j = n-1; while(i+1<j){ int mid = i+(j-i)/2; if(rotateArray[mid]<rotateArray[j]) j = mid; else if(rotateArray[mid]==rotateArray[j]) //特殊情况 j = j-1; else i = mid; } return min(rotateArray[i],rotateArray[j]); //[1,2,2,2,2,2] 通过不了 } };