二分查找:力扣33. 搜索旋转排序数组

1、题目描述:

二分查找:力扣33. 搜索旋转排序数组_第1张图片

2、题解:

二分查找:
nums[mid]与nums[left]作比较
如果nums[mid] >= nums[left]:说明[left,mid]有序,再看nums[left] <= target < nums[mid];
否则,说明[mid,right]有序,再看nums[mid] < target <= nums[right]

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        #二分查找
        if not nums:return -1
        left,right = 0,len(nums) - 1
        while left <= right:
            mid = left + (right - left) // 2
            if nums[mid] == target:
                return mid 
            if nums[mid] >= nums[left]:
                if nums[left] <= target < nums[mid]:
                    right = mid - 1
                else:
                    left = mid + 1
        else:
            if nums[mid] < target <= nums[right]:
                left =mid + 1
            else:
                right = mid - 1
        return -1

3、复杂度分析:

时间复杂度:O(logN)
空间复杂度:O(1)

你可能感兴趣的:(LeetCode)