题意:给一个旋转过的排序数组,找到指定数字的位置。
思路:首先求得中值mid ,如果mid>left,说明从left到mid之间是连续的,若target不在这之间,则在另一边
mid<left同理
class Solution {
public:
int find(vector<int>& nums, int l, int r, int target)
{
int mid = (l + r)/2;
if(l > r)
return -1;
if(nums[mid] == target)
{
return mid;
}
else if(nums[mid] >= nums[l])
{
if(target >= nums[l] && target <= nums[mid])
return find(nums, l, mid - 1, target);
else return find(nums, mid + 1, r, target);
}
else if(nums[mid] < nums[l])
{
if(target >= nums[mid] && target <= nums[r])
return find(nums, mid + 1, r, target);
else return find(nums, l, mid - 1, target);
}
}
int search(vector<int>& nums, int target) {
if(nums.size() == 0)
return -1;
return find(nums, 0, nums.size()-1, target);
}
};