Menu
CoddyTech

Sliding Window Maximum

整数の配列 nums とウィンドウサイズ k が与えられます。ウィンドウは連続する k 個の値をカバーします。配列の左端から始まり、右端が最後の値に重なるまで、一度に1つずつ右へ移動します。

左から右へ、各位置のウィンドウ内の最大値を含む配列を返してください。長さ n の配列には n-k+1 個のウィンドウがあるため、結果は 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
  • 結果には、ウィンドウごとに1つずつ、左から右の順にnums.length-k+1個の値が含まれます。

例

入力
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
出力
[12, 12, 12, 8, 8]
説明
12は最初の3つのウィンドウ、[4, 2, 12]、[2, 12, 3]、[12, 3, 8]に含まれています。12が外れると、ウィンドウ[3, 8, 5]と[8, 5, 1]はどちらも最大値が8になります。

lock icon提出時に隠しテスト+15件

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]