返回

Python 语言轻松搞定 LeetCode 74:在二维矩阵中寻找目标值

后端

导言

在计算机科学中,搜索算法是查找数据结构中特定元素或一组元素的算法。搜索算法可以分为两类:顺序搜索和二分搜索。

顺序搜索是最简单的一种搜索算法。它从数据结构的第一个元素开始,依次检查每个元素,直到找到目标元素或到达数据结构的末尾。

二分搜索是一种更快的搜索算法。它适用于已排序的数据结构。二分搜索算法首先将数据结构的中间元素与目标元素进行比较。如果中间元素等于目标元素,则搜索结束。如果中间元素小于目标元素,则搜索继续在数据结构的上半部分进行。如果中间元素大于目标元素,则搜索继续在数据结构的下半部分进行。

在本文中,我们将使用 Python 语言来实现这两种搜索算法。

Python 实现

def binary_search(arr, target):
  """
  二分搜索算法

  参数:
    arr:已排序的列表
    target:要查找的目标值

  返回值:
    如果找到目标值,返回其索引。否则,返回 -1。
  """

  low = 0
  high = len(arr) - 1

  while low <= high:
    mid = (low + high) // 2
    if arr[mid] == target:
      return mid
    elif arr[mid] < target:
      low = mid + 1
    else:
      high = mid - 1

  return -1


def暴力求解(arr, target):
  """
  暴力求解算法

  参数:
    arr:列表
    target:要查找的目标值

  返回值:
    如果找到目标值,返回其索引。否则,返回 -1。
  """

  for i in range(len(arr)):
    if arr[i] == target:
      return i

  return -1


if __name__ == "__main__":
  # 测试数据
  arr = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
  target = 11

  # 使用二分搜索算法查找目标值
  result = binary_search(arr, target)

  # 如果找到目标值,打印其索引
  if result != -1:
    print("找到目标值 {},索引为 {}。".format(target, result))
  else:
    print("未找到目标值 {}。".format(target))

  # 使用暴力求解算法查找目标值
  result = 暴力求解(arr, target)

  # 如果找到目标值,打印其索引
  if result != -1:
    print("找到目标值 {},索引为 {}。".format(target, result))
  else:
    print("未找到目标值 {}。".format(target))

结语

这篇文章介绍了两种在 Python 中查找二维矩阵中目标值的方法:二分搜索和暴力求解。二分搜索适用于已排序的矩阵,而暴力求解适用于任何矩阵。这两种方法各有优缺点,您可以根据自己的需要选择合适的方法。