89_leetcode_Search in Rotated Sorted Array II

来源:互联网 发布:centos 7.3 lnmp 编辑:程序博客网 时间:2024/04/28 09:10

Search in rotated Sorted Array; 如果数组中包含重复的数字


1:特殊情况;2:数组没有旋转;3:找到数组旋转的两部分,如果在寻找的过程中,三个(start, end, middle)索引的数字相同, 直接返回顺序查找的结果;3:找到两部分,对数字进行二分查找


    bool search(int A[], int n, int target)    {        if(A == NULL || n <= 0)        {            return false;        }                if(A[0] < A[n-1])        {            return BinarySearch(A,0, n-1, target);        }                int start = 0;        int end = n - 1;                while(start < end - 1)        {            int middle = (start + end) / 2;            if(A[middle] == A[start] && A[middle] == A[end])            {                return linearSearch(A, n, target);            }            else if(A[middle] <= A[end])            {                end = middle;            }            else if(A[middle] >= A[start])            {                start = middle;            }        }                if(A[n-1] >= target && A[end] <= target)        {            return BinarySearch(A, end, n - 1 , target);        }        else if(A[start] >= target && A[0] <= target)        {            return BinarySearch(A, 0, start, target);        }        else        {            return false;        }    }        bool linearSearch(int A[], int n, int target)    {        for(int i = 0; i < n; i++)        {            if(A[i] == target)            {                return true;            }        }                return false;    }        bool BinarySearch(int A[], int start, int end, int target)    {        while(start <= end)        {            int middle = (start + end) / 2;            if(A[middle] == target)            {                return true;            }            else if(A[middle] > target)            {                end = middle - 1;            }            else            {                start = middle + 1;            }        }                return false;    }


0 0
原创粉丝点击