leetcode 33. Search in Rotated Sorted Array

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);



    }

  

原文地址:https://www.cnblogs.com/fanhaha/p/7308322.html