- 二分查找: 旋转排序数组中仍然可以应用二分查找算法。首先,我们找到数组中最小的元素的索引,也就是旋转点的位置。然后,我们根据目标值与旋转点的大小关系,在旋转点的左侧或右侧进行常规的二分查找。
def search(nums, target):
# 寻找旋转点
left, right = 0, len(nums) - 1
while left < right:
mid = (left + right) // 2
if nums[mid] > nums[right]:
left = mid + 1
else:
right = mid
# 二分查找目标值
start = left
left, right = 0, len(nums) - 1
if target >= nums[start] and target <= nums[right]:
left = start
else:
right = start
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
- 直接遍历: 如果数组长度较小,也可以直接遍历整个数组来寻找目标值。
def search(nums, target):
for i in range(len(nums)):
if nums[i] == target:
return i
return -1
- 利用Python的内置函数:
Python提供了一些内置函数,如
index()
和in
操作符,可以方便地进行元素搜索。
def search(nums, target):
if target in nums:
return nums.index(target)
else:
return -1
标签:right,return,target,nums,python,mid,排序,解法,left
From: https://blog.51cto.com/lzning/9267762