题解
- 注意下标选取不要使用
,避免越界
AC-Code
class Solution {
public:
int search(vector<int>& nums, int target) {
int n = nums.size();
if(n == 0) return -1;
if(n == 1) return nums[0] == target ? 0 : -1;
int L = 0, R = n - 1;
while(L <= R) {
int mid = L + (R - L >> 1);
if(nums[mid] == target) return mid;
if(nums[0] <= nums[mid]) { // 左侧有序
if(nums[0] <= target && target < nums[mid]) { // 如果在左面有序范围
R = mid - 1;
}
else { // 可能在右面
L = mid + 1;
}
}
else { // 右侧有序
if(nums[mid] < target && target <= nums[n - 1]) { // 在右侧有序范围
L = mid + 1;
}
else { // 可能在左面
R = mid - 1;
}
}
}
return -1;
}
};