rotated sorted array, 肯定有一半是有序的,只有一半中有旋转。

 

1 2 3 4 5 6 

5 6 1 2 3 4(s-mid 是旋转的)

3 4 5 6 1 2 (mid-end 是旋转的)

没有旋转的一半中,起始点肯定小于终止点,找到没有旋转的一半,确定目标值是不是在这一半,如果没在就在旋转的一半中进行二分查找

int binarySearch(vector<int> & nums, int s, int e, int target)
    {
        if(nums[s]==target)
        return s;
        if(nums[e]==target)
            return e;

    if(s>=e)
            return -1;
   int mid=s+(e-s)/2;
    if(nums[mid]==target)
        return mid;

    if(nums[mid]>nums[s])
    {
        if(nums[s]<target&& nums[mid]>target)
        {

            return binarySearch(nums, s, mid, target);
        }
        else
            return binarySearch(nums, mid+1, e, target);

    }


    if(nums[mid+1]<=nums[e])
    {
        if(nums[mid]<target&& nums[e]>target)
            return binarySearch(nums,mid+1, e,target);
        else
            return binarySearch(nums,s, mid, target);

    }


    }

    int search(vector<int>& nums, int target) {
        int n=nums.size();
        if(n<1)
            return -1;
        return binarySearch(nums,0,n-1, target);



    }

  

相关文章:

  • 2022-02-22
  • 2021-10-18
  • 2021-05-26
  • 2021-07-22
猜你喜欢
  • 2022-02-02
  • 2022-01-30
  • 2022-01-04
  • 2021-08-24
  • 2021-06-26
  • 2022-01-03
  • 2022-01-15
  • 2021-10-29
相关资源
相似解决方案