Pythonでスライディングウィンドウ最大値を求める方法


以下に、シンプルで簡単な方法といくつかのコード例を示します。

  1. シンプルな方法: スライディングウィンドウのサイズを指定し、ウィンドウ内の要素を比較して最大値を見つける方法です。以下はPythonのコード例です。
def sliding_window_max(nums, k):
    result = []
    window = nums[:k]
    result.append(max(window))
    for i in range(k, len(nums)):
        window.pop(0)
        window.append(nums[i])
        result.append(max(window))
    return result
# 使用例
nums = [1, 3, -1, -3, 5, 3, 6, 7]
k = 3
max_values = sliding_window_max(nums, k)
print(max_values)  # 出力: [3, 3, 5, 5, 5, 6, 7]
  1. collectionsモジュールのdequeを使用する方法: collectionsモジュールのdequeを使うと、スライディングウィンドウの操作がより効率的になります。以下はPythonのコード例です。
from collections import deque
def sliding_window_max(nums, k):
    result = []
    window = deque(nums[:k])
    result.append(max(window))
    for i in range(k, len(nums)):
        window.popleft()
        window.append(nums[i])
        result.append(max(window))
    return result
# 使用例
nums = [1, 3, -1, -3, 5, 3, 6, 7]
k = 3
max_values = sliding_window_max(nums, k)
print(max_values)  # 出力: [3, 3, 5, 5, 5, 6, 7]