leetcode 33:搜索旋转排序数组

首先使用二分法找到旋转的位置,也就是nums[s]>nums[s+1]的下标,比如nums = [4,5,6,7,0,1,2], target = 0

找到7的位置,下标记为c

之后比较target与数组最后一个元素大小,如果target大于最后一个元素,则target应该在下标c之前,否则在c之后

void sortA(std::vector<int>&nums,int s,int t,int &n){
    if(s==t){
        if(s!=nums.size()-1&&nums[s]>nums[s+1])
        {
            n=s;
            return;
        }
    }else
    {
        int m=(s+t)/2;
        sortA(nums,s,m,n);
        sortA(nums,m+1,t,n);
    }
}

int searchA(std::vector<int> nums,int s,int t,int target){
    if(s==t){
        if(target==nums[s])
            return s;
        else
            return -1;
    }
    int m=(s+t)/2;
    return std::max(searchA(nums,s,m,target),searchA(nums,m+1,t,target));
}

int search(std::vector<int>& nums, int target) {
    if(nums.size()==0)
        return -1;
    int c=0;
    sortA(nums,0,nums.size()-1,c);
    if(target>nums[nums.size()-1])
        return searchA(nums,0,c,target);
    else
        return searchA(nums,c,nums.size()-1,target);
}

猜你喜欢

转载自blog.csdn.net/u013263891/article/details/83721748