LeetCode #33 Search in Rotated Sorted Array

题目

Search in Rotated Sorted Array


解题方法

典型的查找型题目,暴力破解的时间复杂度是O(n),由于元素有顺序,可以在它的基础上稍微再简化一下:

以数组中第一个数为基准,若target大于nums[0],则从第一位开始找,直到找到target,或者当前位置的数小于nums[0],或下标越界;若target小于nums[0],则从最后一位开始找,判定条件同理可推。

这种简化方法多次测试后会优于直接暴力破解,但时间复杂度仍然是O(n)。


代码

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        ret = -1
        if not len(nums):
            return ret
        
        if nums[0] < target:
            i = 1
            while i < len(nums) and nums[i] <= target and nums[i] >= nums[0]:
                if nums[i] == target:
                    ret = i
                    break
                i += 1
        elif nums[0] > target:
            i = len(nums) - 1
            while i > -1 and nums[i] >= target and nums[i] <= nums[len(nums)-1]:
                if nums[i] == target:
                    ret = i
                    break
                i -= 1
        else:
            ret = 0
        
        return ret
posted @ 2020-10-12 08:48  老鼠司令  阅读(69)  评论(0)    收藏  举报