Menu
CoddyTech

Sliding Window Maximum

整数の配列 nums とウィンドウサイズ k が与えられます。k 個の連続する値からなるウィンドウは左端から始まり、右端が最後の値に達するまで、一度に1つずつ右へ移動します。配列の長さが n の場合、左から右へ各位置でのウィンドウ内の最大値を返します。値の数は n-k+1 個です。

関数

maxSlidingWindow(nums: integer-array, k: integer) → integer-array
numsinteger-array
配列上をスライドするウィンドウ
kinteger
各ウィンドウ内の値の数
戻り値integer-array
左端のウィンドウから右端のウィンドウまで、各ウィンドウの最大値

制約

  • 1 ≤ k ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • 結果にはnums.length-k+1個の値が含まれます。ウィンドウごとに1つずつ、左から右の順に並びます。

例

入力
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
出力
[12, 12, 12, 8, 8]
説明
12 は最初の3つのウィンドウに含まれているため、それぞれの答えは 12 です。12 がウィンドウから外れた後、[3, 8, 5] と [8, 5, 1] はどちらも最大値が 8 です。
challenge icon

発展問題

末尾への値の追加、先頭からの値の削除、現在の最大値の読み取りを、それぞれ償却時間 O(1) で行えるキューを作れますか?

コードをリセット
def maxSlidingWindow(nums, k):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

nums = [4, 2, 12, 3, 8, 5, 1]
k = 3

期待される出力

[12, 12, 12, 8, 8]