一、题目
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。
你可以假设数组中不存在重复的元素。
你的算法时间复杂度必须是 O(log n) 级别。
示例1
输入: nums = [4,5,6,7,0,1,2], target = 0
输出: 4
示例2
输入: nums = [4,5,6,7,0,1,2], target = 3
输出: -1
二、代码
python
class Solution:
def search(self
, nums
: List
[int], target
: int) -> int:
def half_search(nums
, target
, i
, j
, head
):
mid
= int(0.5 * (j
+ i
))
if i
> j
:
return -1
if nums
[mid
] == target
:
return mid
if (nums
[mid
] < target
< head
) or (head
<= nums
[mid
] < target
) or (nums
[mid
] >= head
and target
< head
):
return half_search
(nums
, target
, mid
+ 1, j
, head
)
else:
return half_search
(nums
, target
, i
, mid
-1, head
)
if not nums
:
return -1
return half_search
(nums
, target
, 0, len(nums
) - 1, nums
[0])