搜索旋转排序数组

假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2)。给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。

你可以假设数组中不存在重复的元素。

样例

给出[4, 5, 1, 2, 3]和target=1,返回 2

给出[4, 5, 1, 2, 3]和target=0,返回 -1

class Solution {
    /** 
     * param A : an integer ratated sorted array
     * param target :  an integer to be searched
     * return : an integer
     */
public:
    int search(vector<int> &A, int target) {
        // write your code here
        int n = A.size();

	    return visit(A, 0, n-1, target);
    }
private:
    int visit(vector<int> &A, int left, int right, int target)
    {
	    if (left > right)
	    {
		    return -1;
	    }

	    while (left <= right)
	    {
		    int mid = left + (right-left)/2;
		    if (A[mid] == target)
		    {
			    return mid;
		    }
		    else if (A[mid] < target)
		    {
			    if (A[left] < A[right])
			    {
				    left = mid+1;
			    }
			    else
			    {
				    if (A[mid] > A[left])
				    {
					    left = mid+1;
				    }   
				    else
				    {
					    int temp = visit(A, mid+1, right, target);
					    if (temp != -1)
					    {
						    return temp;
					    }
					    else
					    {
						    return visit(A, left, mid-1, target);
					    }
				    }
			    }
		    }
		    else
		    {
			    if (A[left] < A[right])
			    {
				    right = mid-1;
			    }
			    else
			    {
				    if (A[mid] > A[left])
				    {
					    int temp = visit(A, left, mid-1, target);
					    if (temp != -1)
					    {
						    return temp;
					    }
					    else
					    {
						    return visit(A, mid+1, right, target);
					    }
				    }
				    else
				    {
					    right = mid-1;
				    }
			    }
		    }
	    }

	    return -1;
    }
};


你可能感兴趣的:(搜索旋转排序数组)