分析:时间复杂度
O
(
l
o
g
n
)
O(logn)
O(logn),于是想到了二分查找。
把一个字符串从mid处切开,那么必定一部分是有序的,另一部分是无序的。不断切割,直到待查找的数落在了一个有序的区间内,二分查找即可。
class Solution {
public:
int search(vector<int>& nums, int target)
{
int le=0,ri=nums.size()-1;
int mid=le+(ri-le)/2;
if(nums.size()==1&&nums[0]==target) return 0;
while(le<=ri)
{
if(nums[mid]==target)return mid;
if(nums[le]==target) return le;
if(nums[ri]==target) return ri;
//cout<<nums[mid]<<" "<<nums[le]<<" "<<nums[ri]<<endl;
mid=le+(ri-le)/2;
if(nums[le]<nums[mid]) //左半部分有序
{
if(nums[le]<target&&nums[mid]>target) {ri=mid-1;}
else {le=mid+1;}
}
else //右半部分有序
{
if(nums[mid]<target&&target<nums[ri]){le=mid+1;}
else {ri=mid-1;}
}
}
return -1;
}
};