Problem:

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.

解题关键:在于确定mid位于转折点之前,还是之后

solution:

class Solution:
    # @param A, a list of integers
    # @param target, an integer to be searched
    # @return an integer
    def search(self, A, target):
        low = 0 
        high = len(A)
    
        while high != low:
            mid = (low+high)/2
            if A[mid] == target:
                return mid
            if A[low] < A[mid]:
                if target<A[mid] and A[low] <= target:
                    high = mid
                else:
                    low += 1
            else:
                if A[mid] < target and target <= A[high-1]:
                    low = mid + 1
                else:
                    high = mid
        return -1