滑動視窗的最大值

2022-01-29 18:33:57 字數 943 閱讀 9527

目錄1. 概述

有好幾種解法,比較常規的有2中,1是單調佇列,隊首存放最值。2是優先佇列,top也是存放的最值。

2. 優先佇列

class solution );

}vectorans = ;

for (int i = k; i < n; ++i) );

// ,出隊

while (q.top().second <= i-k)

ans.push_back(q.top().first);

}return ans;

}};

直接引用leetcode的題解,priority_queue,預設大根堆,裡面放pair, 因為滑動視窗移動的時候,要將index出界的刪除(pop),top存放最大值的值和索引。

先是進k個元素,然後迴圈的時候 入隊, 檢測top的index是否<= i-k ,成立的話pop(),將佇列的top的值放入vector。

3. 雙端佇列

class solution 

q.push_back(i);

}// 第乙個值

vectorans= ;

for (int i = k; i < n; ++i)

q.push_back(i);

while (q.front()<= i-k)

ans.push_back(nums[q.front()]);

}return ans;

}};

deque裡面放索引,值可以通過索引來取值。

deque本身是單調遞減的,隊首存放最大值,這是重點。

先是把k的最大值放到deque裡面去,當第乙個值,

然後處理[k,n-1]的值,如果nums[i] 大於隊尾的值,則將隊尾元素出棧。

然後再檢測隊首的索引有沒有出界 i-k,如果出界,就隊首出棧。最後將隊首取出來,拿到元素,放入結果集中。

滑動視窗最大值

題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 幾個注意點 利用雙端佇列實現,如果後者比前者大,前者丟擲,後者進,如果比前者小,壓入佇列,判斷隊頭是否過期,這就需...

滑動視窗最大值

給定乙個陣列和滑動視窗的大小,請找出所有滑動視窗裡的最大值。public class 滑動視窗的最大值 if num.length size size 1 用來儲存可能是滑動視窗最大值的數字的下標 linkedlist indexdeque newlinkedlist for int i 0 i s...

滑動視窗最大值

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大...