#33. Search in Rotated Sorted Array 
 

'''
Suppose an array sorted in ascending order 
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.
'''


#Binary Search,  Array 


class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        
        left,right=0,len(nums)-1
        
        while left<=right:
            mid=(left+right)/2
            print left, right, mid
            if nums[mid]==target:
                return mid
            elif (nums[left]<nums[mid] and nums[mid]>target and nums[left]<=target) \
                or (nums[left]>nums[mid] and (target>nums[right] or target<nums[mid])):
                    right=mid-1
            else:
                    left=mid+1                    
        
        return -1