【leetcode】33. Search in Rotated Sorted Array

题目如下:

解题思路:题目要求时间复杂度是O(log n),而且数组也是有序的,那么可以考虑采用二分查找法。那么解题的关键就是找出转折点,找到了转折点后,把数组拆分成两段,再分别用二分查找,即可得到答案。

代码如下:

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        if len(nums) == 0:
            return -1
        split = 0
        for i in xrange(len(nums)-1):
            if nums[i] > nums[i+1]:
                split = i + 1
                break

        import  bisect
        #print nums[:split]
        res = bisect.bisect_left(nums[:split],target)
        #print res
        if res < len(nums[:split]) and nums[:split][res] == target:
            return res

        res = bisect.bisect_left(nums[split:], target)
        #print nums[split:]
        #print res
        if res < len(nums[split:]) and nums[split:][res] == target:
            return res + split
        return -1

猜你喜欢

转载自www.cnblogs.com/seyjs/p/8995983.html