返回
Python 轻松玩转 Leetcode 34:找出有序数组中的目标元素及其位置
后端
2023-09-21 20:30:05
算法剖析:二分查找法
二分查找法是一种高效的搜索算法,用于在有序数组中查找特定元素。它利用了数组的排序特性,每次将数组一分为二,缩小查找范围。算法步骤如下:
- 初始化两个指针,分别指向数组的第一个元素和最后一个元素。
- 计算数组的中间位置,作为新的中间指针。
- 将中间元素与目标元素进行比较:
- 如果中间元素等于目标元素,则返回中间元素的索引。
- 如果中间元素小于目标元素,则将中间指针右移。
- 如果中间元素大于目标元素,则将中间指针左移。
- 重复步骤 2 和 3,直到找到目标元素或数组为空。
Python 代码实现:
def find_first_and_last_position(nums, target):
"""
查找有序数组中目标元素及其位置。
参数:
nums:有序数组。
target:目标元素。
返回:
一个列表,包含目标元素在数组中的第一个和最后一个位置。
"""
# 初始化指针
left = 0
right = len(nums) - 1
# 查找第一个位置
while left <= right:
mid = left + (right - left) // 2
if nums[mid] < target:
left = mid + 1
elif nums[mid] > target:
right = mid - 1
else:
# 找到第一个位置
first_position = mid
# 继续查找最后一个位置
while mid + 1 <= right and nums[mid + 1] == target:
mid += 1
last_position = mid
return [first_position, last_position]
# 未找到目标元素
return [-1, -1]
# 测试代码
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 5
result = find_first_and_last_position(nums, target)
print("第一个位置:", result[0])
print("最后一个位置:", result[1])
结语
恭喜你,你已经掌握了 Leetcode 34 题的 Python 解法。二分查找法作为一种高效的搜索算法,不仅适用于有序数组,还广泛应用于其他领域。希望本指南能帮助你理解算法原理,并轻松解决更多类似问题。继续练习和探索,你将在算法的世界中不断进步!