Search in Rotated Sorted Array

来源:互联网 发布:mac os 10.9 iso下载 编辑:程序博客网 时间:2024/05/18 21:39

可以采用二分查找。

分为3种情况:

一, 5, 6, 1, 2, 3 即a[mid] < a[start] && a[mid] <= a[end]

二,5, 6, 7, 1, 2 即a[mid] >= a[start] && a[mid] > a[end]

三,1, 2, 3, 4, 5 即a[mid] >= a[start] && a[mid] <= a[end]

这三种情况是针对数组旋转之后的结果分的。当然,对于每一类,我们还需要考虑是排除前一半还是后一半。

class Solution {public:    int b_s(int a[], int start, int end, int target)    {        if(start > end) return -1;        int mid = (start + end) >> 1;        if(a[mid] == target) return mid;        if(a[start] > a[mid] && a[mid] <= a[end])        {            if(a[mid] > target || (a[end] < target))                 return b_s(a, start, mid - 1, target);            else return b_s(a, mid + 1, end, target);                                                                         }        else if(a[mid] >= a[start] && a[mid] > a[end])        {            if(a[mid] < target || target < a[start])                 return b_s(a, mid + 1, end, target);            else return b_s(a, start, mid - 1, target);        }        else        {            if(a[mid] > target) return b_s(a, start, mid - 1, target);            else return b_s(a, mid + 1, end, target);        }    }    int search(int A[], int n, int target) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        return b_s(A, 0, n - 1, target);    }};


原创粉丝点击