Friday, June 6, 2014

Leetcode (Python): 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.

Solution:

class Solution:
    # @param A, a list of integers
    # @param target, an integer to be searched
    # @return an integer
    def search(self, A, target):
        if len(A)==0:
            return -1;
        targetInRotated = target>=A[0]
        begin = 0
        end = len(A)-1
        while begin<=end:
            midpoint = (begin+end)//2
            if A[midpoint]==target:
                return midpoint
            if targetInRotated and A[midpoint]<A[0]:
                end= midpoint - 1
            elif (not targetInRotated) and A[midpoint]>=A[0]:
                begin = midpoint + 1
            elif A[midpoint]<target:
                begin = midpoint + 1
            else:
                end = midpoint - 1
        return -1

No comments :

Post a Comment