LeetCode Search in Rotated Sorted Array

Search in Rotated Sorted Array

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

线性的算法。
class Solution {
public:
    int search(int A[], int n, int target) {
        if(NULL == A || 0 == n)
    		return -1;
		for(int i = 0; i < n; ++i)
			if(A[i] == target)
				return i;
		return -1;
    }
};

O(logN)的方法。

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

			}
			else//right
			{
				if(A[mid] < target && target <= A[right])
					left = mid + 1;
				else
					right = mid - 1;
			}
		}

		return -1;
    }
};


你可能感兴趣的:(LeetCode Search in Rotated Sorted Array)