假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2])。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它在数组中的下标,否则返回 -1。 已知的是,数组中不存在重复的元素。 你的算法时间复杂度必须是 O(logn) 级别。 本关的编程任务是补全右侧代码片段中 Begin 至 End 中间的代码,实现计算目标值 T 在数组 nums 中位置的功能,将计算的结果作为返回值返回。
时间: 2023-12-03 09:42:31 浏览: 68
Python算法题源代码-LeetCode(力扣)-搜索旋转排序数组
```python
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) // 2
if nums[mid] == target:
return mid
# 左半部分有序
if nums[left] <= nums[mid]:
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
```
在这个算法中,我们首先找到中间的元素并检查它是否是我们要找的目标元素。如果找到了目标元素,我们立即返回它的索引。
如果没有找到目标元素,我们需要判断哪一半是有序的,然后判断目标元素是否在有序的那一半中。如果是,我们将搜索范围缩小到该半部分;否则,我们将搜索范围缩小到另一半。
阅读全文