Search in Rotated Sorted Array

来源:互联网 发布:system halted linux 编辑:程序博客网 时间:2024/04/30 11:39
class Solution {public:    int search(int A[], int n, int target) {        if(n==0)        {            return -1;        }        if(n==1)        {            if(target==A[0])            {                return 0;            }            else            {                return -1;            }        }        int part1Min=A[0];        int part2Max=A[n-1];        int start=0;        int end=n;        if(part1Min>part2Max)        {            //find the start of the second part            int pstart=0;            int pend=n-1;            while(pstart<pend)            {                int mid=pstart+(pend-pstart)/2;                if(A[mid]<part1Min)                {                    pend=mid;                }                else                {                    pstart=mid+1;                }            }            int part2Start=pstart;            if(target<part1Min)            {                start=part2Start;                end=n;            }            else            {                start=0;                end=part2Start;            }         }        while(start<end)        {            int mid=start+(end-start)/2;            if(A[mid]==target)            {                return mid;            }            else if(A[mid]>target)            {                end=mid;            }            else            {                start=mid+1;            }        }        return -1;    }};

基本思路是,首先判断是否存在旋转,如果不存在,就是一个基本的2分查找;如果存在,找到旋转后第二部分的起点,判断target位于那一部分,然后在对应的部分里进行二分查找即可。

0 0
原创粉丝点击