注意
区间始终左闭右开。左和右之间的差距小于等于1时返回。
注意要考虑数组为空的情况
代码
class Solution {
public:
int ans = -1;
void binary_search(vector<int>&nums,int left,int right,int target)
{
//printf("left = %d,rihgt = %d\n",left,right);
if(nums[left] == target){
ans = left;
return ;
}
if(right - left <= 1)return ;
int mid = (left + right) / 2;
if(nums[left] <= nums[right - 1])
{
if(target < nums[mid])binary_search(nums,left,mid,target);
else binary_search(nums,mid,right,target);
}
else
{
binary_search(nums,left,mid,target);
binary_search(nums,mid,right,target);
}
}
int search(vector<int>& nums, int target) {
if(nums.size() == 0)return -1;
binary_search(nums,0,nums.size(),target);
return ans;
}
};