【leetcode】Search in Rotated Sorted Array II(middle)☆

Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

 

我的思路:

太混乱了 不提了。注意关键区分依据 排好序的一定是从小到大的

看大神的吧:

bool search(int A[], int n, int key) {
    int l = 0, r = n - 1;
    while (l <= r) {
        int m = l + (r - l)/2;
        if (A[m] == key) return true; //return m in Search in Rotated Array I
        if (A[l] < A[m]) { //left half is sorted 排好序的部分一定是从小到大的
            if (A[l] <= key && key < A[m]) //在排好序的这部分
                r = m - 1;
            else
                l = m + 1;
        } else if (A[l] > A[m]) { //right half is sorted
            if (A[m] < key && key <= A[r])
                l = m + 1;
            else
                r = m - 1;
        } else l++; //A[l] == A[m] 把l增大1个再循环
    }
    return false;
}

 

我的代码,把三个数字都相等的情况单独处理,其他就用无重复处理。 其实我的代码看起来长一些,但是在处理1111111111115这种情况时我的方法优势还是有的

bool search(int A[], int n, int target) {
    int l = 0, r = n - 1;
    while(l <= r)
    {
        int m = (l + r) / 2;
        if(target == A[m])
            return true;
        else if(A[l] == A[m] && A[m] == A[r]) //三个值相等
        {
            bool isequalleft = true;
            for(int i = l; i < m; i++)
            {
                if(A[i] != A[i + 1])
                {
                    isequalleft = false;
                    break;
                }
            }
            if(isequalleft) //去掉重复的那一半
                l = m + 1;
            else
                r = m - 1;
        }
        else //与不重复的方法相同
        {
            if (A[l] <= A[m]) {
                if (target >= A[l] && target < A[m]) {
                    r = m - 1;
                } else {
                    l = m + 1;
                }
            } else {
                if (target > A[m] && target <= A[r]) {
                    l = m + 1;
                } else {
                    r = m - 1;
                }
            }
        }
    }

    return false;    
}

 

posted @ 2015-03-20 17:53  匡子语  阅读(215)  评论(0编辑  收藏  举报