LeetCode: Search in Rotated Sorted Array II

来源:互联网 发布:window 查看端口 编辑:程序博客网 时间:2024/06/08 16:41

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.


class Solution {public:    bool search(int A[], int n, int target) {        int left = 0, right = n-1, mid = 0;        while(left <= right)        {            mid = (left+right) / 2;            if(A[mid] == target)                return true;            if(A[mid] > A[left])            {                if(target >= A[left] && target <= A[mid])                    right = mid-1;                else                    left = mid+1;            }            else if(A[mid] < A[left])            {                if(target >= A[mid] && target <= A[right])                    left = mid+1;                else                    right = mid-1;            }            else                left++;        }        return false;    }};


Round 2:

class Solution {public:    bool search(int A[], int n, int target) {        return binarySearch(0, n-1, A, target);    }private:bool binarySearch(int l, int r, int A[], int target){if(l > r)return false;int mid = (l + r) /2;if(A[mid] == target)return true;if(A[mid] == A[l] && A[mid] == A[r])return binarySearch(l+1, r-1, A, target);else if(A[mid] == A[r]){return binarySearch(l, r-1, A, target);}else if(A[mid] == A[l]){return binarySearch(l+1, r, A, target);}else{if(A[mid] < A[r]){if(target < A[mid] || (target > A[mid] && target > A[r]))return binarySearch(l, mid-1, A, target);elsereturn binarySearch(mid+1, r, A, target);}else{if(target > A[mid] || (target < A[mid] && target < A[l]))return binarySearch(mid+1, r, A, target);elsereturn binarySearch(l, mid-1, A, target);}}}};


0 0