Python アルゴリズムの実装: 最大値およびスライディング ウィンドウ
最大ウィンドウとスライディング ウィンドウは古典的なアルゴリズムの問題です。この記事では、このアルゴリズムを Python で実装する方法と、完全なソース コードを提供する方法を紹介します。
アルゴリズムの説明
整数配列 nums と整数 k を指定すると、配列の左端から右端に移動するサイズ k のスライディング ウィンドウが存在します。ウィンドウには k 個の数字のみが表示されます。毎回、ウィンドウは右に 1 つずつ移動します。私たちの目標は次のとおりです。
- スライディング ウィンドウの最大値を見つける
- すべてのスライディング ウィンドウの最大値の合計を計算します。
たとえば、配列 nums = [1,3,-1,-3,5,3,6,7]、k = 3 の場合、[3,3,5,5,6,7] が返され、すべてのスライディング ウィンドウの最大値の合計は 24 になります。
アルゴリズムのアイデア
この問題を解決するには、両端のキューを使用できます。まず、最初の k 要素を両端キューに格納し、それらの最大値を見つけます。次に、k 番目の要素から開始して反復し、各反復ステップで次のことを実行します。
- キューに k 個の要素だけが残るまで、キューの左側の要素を削除します。
- 現在の要素をキューの右側に追加します
- 現在キュー内にある最大値を見つけて出力配列に追加します。
最後に、出力配列の合計を計算します。
Pythonコードの実装
以下は完全な Python コード実装です。
from collections import deque
def max_sum_sliding_window(nums, k):
n = len(nums)
if n * k == 0:
return []
if k == 1:
return nums
# 初始化双端队列
dq = deque()
for i in range(k):
while