一、题目
二、思路
将数组一分为二,其中一定有一个是有序的,另一个可能是有序,也能是部分有序。
此时有序部分用二分法查找。无序部分再一分为二,其中一个一定有序,另一个可能有序,可能无序。就这样循环.
三、代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
int mid=(left+right)/2;
while(left<=right){
mid=(left+right)/2;
if(nums[mid]==target){
return mid;
}
//0-mid是有序的
if(nums[0]<=nums[mid]){
//target在num[mid]、nums[0]之间
if(target<nums[mid] &&target>=nums[0]){
right=mid-1;
}
else{
left=mid+1;
}
}
//mid-right是有序的
else{
if(target>nums[mid] && target<=nums[right]){
left=mid+1;
}
else{
right=mid-1;
}
}
}
return -1;
}
};