采用二分的思路对于数组 二分之后只可能出现上图3种情况
对于每种情况 每次搜索原来范围的一半
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int search(vector<int>& nums, int target) {
return searchbinary(nums, 0, nums.size() - 1, target);
}
private:
int searchbinary(vector<int>& nums, int start, int end, int target)
{
if (start > end)
return -1;
int mid = (start + end) / 2;
if (nums[start] == target)
return start;
if (nums[end] == target)
return end;
if (nums[mid] == target)
return mid;
if (nums[end] > nums[start])//图1
{
if (target<nums[mid] && target>nums[start])//左边
return searchbinary(nums, start+1, mid-1, target);
else//右边
return searchbinary(nums, mid+1, end-1, target);
}
else if (nums[mid] > nums[start])//图2
{
if (target > nums[start] && target < nums[mid])//左边
return searchbinary(nums, start+1, mid-1, target);
else//右边
return searchbinary(nums, mid+1, end-1, target);
}
else//图3
{
if (target > nums[mid] && target < nums[end])//右边
return searchbinary(nums, mid+1, end-1, target);
else//左边
return searchbinary(nums, start+1, mid-1, target);
}
}
};