33. 搜索旋转排序数组
1.题目
2.官方的解决方案
- 思路:点击查看
class Solution:
def search(self, nums: List[int], target: int) -> int:
# 使用二分查找法的前提:升序排列
left = 0
right = len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[0] <= nums[mid]: # 如果左半部分是有序的(要有等号:测试用例[3,1])
if nums[0] <= target <= nums[mid]:
right = mid -1
else:
left = mid + 1
else: # 如果右半部分是有序的
if nums[mid] < target <= nums[-1]:
left = mid + 1
else:
right = mid - 1
return -1
- 时间复杂度: O ( l o g n ) O(logn) O(logn)
- 空间复杂度: O ( 1 ) O(1) O(1)