class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param target int整型
* @return int整型
*/
int search(vector<int>& nums, int target) {
int n = nums.size();
int left = 0, right = n-1;
while(left <= right){
int mid = left + (right-left)/2;
if(nums[mid]==target) return mid;
// 旋转数组关键在于找到有序的部分,并检查target是否在这有序的部分里面,如果在可以利用二分查找,否则就在另外无序的一部分中查找
// 此时,mid左侧是有序的
if(nums[mid]>nums[n-1]){
if(target < nums[mid] && target >= nums[left]){
right = mid-1;
}else{
left = mid +1;
}
}else{ // 此时,mid右侧是有序的
if(target > nums[mid] && target <= nums[right]){
left = mid +1;
}else {
right = mid -1;
}
}
}
return -1;
}
};