返回

乐享算法之美:剑指 Offer 59 - I 滑动窗口的最大值

前端

算法概要

剑指 Offer 59 - I 滑动窗口的最大值旨在求出一个数组中所有连续子数组的最大值。滑动窗口算法的思想是使用一个固定大小的窗口在数组中滑动,在每个位置记录当前窗口的最大值。当窗口移动到下一个位置时,将窗口中最早的元素移除,并将新的元素添加到窗口中。通过这种方式,算法可以有效地找到数组中所有连续子数组的最大值。

实现步骤

以下是实现滑动窗口算法的详细步骤:

  1. 定义一个窗口大小 k,表示窗口中包含的元素个数。
  2. 定义一个数组 max_values,用于存储每个位置的窗口最大值。
  3. 使用一个循环遍历数组,并在每个位置计算当前窗口的最大值。
  4. 将当前窗口的最大值存储在 max_values 数组中。
  5. 将窗口移动到下一个位置,并重复步骤 3 和 4。
  6. 返回 max_values 数组,其中包含了数组中所有连续子数组的最大值。

代码示例

def max_sliding_window(nums, k):
  """
  计算数组中所有连续子数组的最大值。

  Args:
    nums: 输入数组。
    k: 窗口大小。

  Returns:
    一个数组,包含了数组中所有连续子数组的最大值。
  """

  # 定义一个窗口大小。
  window_size = k

  # 定义一个数组,用于存储每个位置的窗口最大值。
  max_values = []

  # 使用一个循环遍历数组。
  for i in range(len(nums) - window_size + 1):

    # 在每个位置计算当前窗口的最大值。
    max_value = max(nums[i:i + window_size])

    # 将当前窗口的最大值存储在 max_values 数组中。
    max_values.append(max_value)

  # 返回 max_values 数组,其中包含了数组中所有连续子数组的最大值。
  return max_values

算法分析

滑动窗口算法的时间复杂度为 O(n),其中 n 是数组的长度。算法只需要遍历数组一次,并在每个位置计算窗口的最大值,因此时间复杂度为 O(n)。

总结

滑动窗口算法是一种高效的算法,适用于查找一组数据中的最大值或最小值。本文详细介绍了剑指 Offer 59 - I 滑动窗口的最大值这道经典算法题,并提供了详细的解决方案和代码示例。掌握滑动窗口算法,可以帮助你解决更多类似的问题,提升你的算法能力。