返回

Python 轻松玩转 Leetcode 34:找出有序数组中的目标元素及其位置

后端

算法剖析:二分查找法

二分查找法是一种高效的搜索算法,用于在有序数组中查找特定元素。它利用了数组的排序特性,每次将数组一分为二,缩小查找范围。算法步骤如下:

  1. 初始化两个指针,分别指向数组的第一个元素和最后一个元素。
  2. 计算数组的中间位置,作为新的中间指针。
  3. 将中间元素与目标元素进行比较:
    • 如果中间元素等于目标元素,则返回中间元素的索引。
    • 如果中间元素小于目标元素,则将中间指针右移。
    • 如果中间元素大于目标元素,则将中间指针左移。
  4. 重复步骤 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 解法。二分查找法作为一种高效的搜索算法,不仅适用于有序数组,还广泛应用于其他领域。希望本指南能帮助你理解算法原理,并轻松解决更多类似问题。继续练习和探索,你将在算法的世界中不断进步!