旋转数组中查找目标数字
33. 搜索旋转排序数组 是一道经典的算法题,需根据给定的旋转后数组和要查找的目标数字,返回其下标位置。这类问题本质上是对于旋转数组相关算法的考察,其中最直接且暴力的方法是遍历全数组,时间复杂度为 O(n),但是我们也可以通过二分法进行优化,将时间复杂度降低至 O(log n)。
具体实现思路如下:
- 先判断目标数字在整个数组的哪个部分 ;
- 在根据判断结果,判断目标数字在旋转数组左边还是右边;
- 最后在有序数组内使用二分法,查找目标数字,并返回其位置。
需要注意的是,二分法在本题里应用的地方是在确定了有序数组范围时,而且其左右边界的确定也需要特殊处理,在本题中可以结合代码理解。
附上 Python3 代码实现:
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 + rig