3、239。スライディングウィンドウの最大値---> ali各kの最大値を見つける
単調双方向キューが使用されている。このデータ構造ができるプッシュ/ポップ素子両端からの一定時間内。要素を格納するよりも、
二重キューのインデックスを格納する方が便利です。両方を配列分析で使用できるためです。
アルゴリズムは非常に単純です。
最初のk要素を処理し、双方向キューを初期化します。
アレイ全体をトラバースします。各ステップで:
双方向キューをクリーンアップします
。-現在のスライディングウィンドウにのみ要素のインデックスを保持します。// pop_front()
-現在の要素より小さいすべての要素を削除します。最大にすることはできません。// pop_back()
は、現在の要素を双方向キューに追加します。
deque [0]を出力に追加します。//これは単調なキューであるため、キューの先頭が最も大きくなければならず
、出力配列を返します。
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> dq;//单调双端队列
vector<int> ans;
int len=0;
for (int i=0;i<nums.size();++i)
{
while (len>0 && (i-dq[0]>=k))
{
dq.pop_fron