leetcode 33. Search in Rotated Sorted Array(二分查找)

来源:互联网 发布:linux mount 远程挂载 编辑:程序博客网 时间:2024/05/01 21:58

只要找到枢轴,在左边或者右边查找target,因为是有序的,所以使用二分查找,这里实现了递归和非递归两种二分查找:


/*int binarySearch(int *nums,int left,int right,int target)   //递归的{    int mid;    if(left>=right)    {        if(nums[left]==target)            return left;        else if(nums[right]==target)            return right;        else            return -1;    }    else    {        mid=(left+right)/2;        if(target>nums[mid])        {            mid++;            return binarySearch(nums,mid,right,target);        }        else if(target<nums[mid])        {            mid--;            return binarySearch(nums,left,mid,target);        }        else            return mid;    }}*/int binarySearch(int *nums,int left,int right,int target)  //非递归的方法{    int mid;    while(left<=right)    {        if(nums[left]==target)            return left;        else if(nums[right]==target)            return right;        else        {            mid=(left+right)/2;            if(target>nums[mid])            {                mid++;                left=mid;            }            else if(target<nums[mid])            {                mid--;                right=mid;            }            else                return mid;        }    }    return -1;}int search(int* nums, int numsSize, int target) {    int i;    if(nums[0]<=nums[numsSize-1])  //没有经过旋转        return binarySearch(nums,0,numsSize-1,target);    else    {        int pivot=0;        for(i=0;i<=numsSize-2;i++)        {            if(nums[i]>nums[i+1])            {                pivot=i;                break;            }        }        if(target<=nums[numsSize-1]&&target>=nums[pivot+1])        {            return binarySearch(nums,pivot+1,numsSize-1,target);        }        else if(target>=nums[0]&&target<=nums[pivot])        {            return binarySearch(nums,0,pivot,target);        }        else            return -1;    }}


0 0
原创粉丝点击