二分

  • 中间值大于右端值,在右区间i=m+1;
  • 中间值小于右端值,在左区间j=m;
  • 中间值等于右端值,缩小区间,j--;
        int i = 0, j = rotateArray.size() - 1;
        while (i < j) {
            int m = i + ((j - i) >> 1);
            if (rotateArray[m] > rotateArray[j]) {
                i = m + 1;
            }
            else if (rotateArray[m] < rotateArray[j]) {
                j = m;
            }
            else {
                j -= 1;
            }
        }
        return rotateArray[i];