class Solution {
public:
int search(vector<int>& nums, int target) {
if (!nums.size()) return -1;
int l = 0, r = nums.size() - 1;
while (l < r) {
int mid = l + r + 1 >> 1;
if (nums[mid] >= nums[0]) l = mid; // 找最后一个满足性质:大于nums[0]的最后的一个元素(最后一个)
else r = mid - 1;
}
if (target >= nums[0]) l = 0; //这里就选择 target>=nums[0]这个性质来找二段性
else l = r + 1, r = nums.size() - 1;
while (l < r) {
int mid = l + r >> 1;
if (nums[mid] >= target) r = mid; // 找到第一个大于等于target的元素 (第一个)
else l = mid + 1;
}
if (target == nums[r]) return r;
else return -1;
}
};