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.

这题需要在旋转数组中查找target,返回index.因为本身是有序数组,且没有重复数字.所以右边一段在左边这段的所有元素下面.

如果二分遇到某段包含pivot的元素在,则无法判断这一段的最低值.但是没关系,二分的关键在于去掉不可能的一半,所以我们可以利用有序的那一半:

1.如果在有序区间内,则在有序区间内继续查找.

2.如果不在有序区间内,则在另外一段无序区间内继续查找.

代码如下:

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        if not nums:
            return -1
        l = 0 
        r = len(nums)-1
        while l + 1 < r:
            mid = l + (r-l)/2
            if nums[mid] == target:
                return mid
            if nums[mid] > nums[l]:
                if  nums[l] <= target < nums[mid]:
                    r = mid
                else:
                    l = mid
            else:
                if nums[mid] < target <= nums[r]:
                    l = mid
                else:
                    r = mid
        if nums[l] == target:
            return l
        elif nums[r] == target:
            return r
        else:
            return -1

 

posted on 2016-05-15 23:07  Sheryl Wang  阅读(115)  评论(0编辑  收藏  举报

导航