滑動視窗的最大值 雙端佇列,O n 的時間。

2021-07-29 18:10:30 字數 844 閱讀 1245

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。

三種解法:

1.multiset,底層紅黑樹 o(nlogn),小心這個容器的刪除erase()方法。

2.deque 雙端佇列 o(n)

3.大頂堆 o(nlongn)  利用priority_queue實現。

解法一:最low ,注意我標註的刪除。

class solution ,如果使用erase(40)的話,會把所有的40都刪除了,得到

multiset::iterator itdel=myset.find(num[i-size+1]);

myset.erase(itdel);//這裡刪除的是某乙個迭代器,而不是value=*itdel的所有值,所以這種方法可以只刪除乙個。}}

return res;

}};

解法二:best

class solution 

res.push_back(top.first);

}return res;

}};

滑動視窗的最大值 雙端佇列

題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 思路 使用暴力求解方法,複雜度為o nk 想到之前使用棧求最小值的演算法,但是棧只能一段刪除資料,所以使用兩端佇列...

lintcode 滑動視窗的最大值 雙端佇列

給出乙個可能包含重複的整數陣列,和乙個大小為 k 的滑動視窗,從左到右在陣列中滑動這個視窗,找到陣列中每個視窗內的最大值。給出陣列 1,2,7,7,8 滑動視窗大小為k 3.返回 7,7,8 解釋 最開始,視窗的狀態如下 1,2 7 7 8 最大值為7 然後視窗向右移動一位 1,2,7,7 8 最大...

lintcode 滑動視窗的最大值 雙端佇列

給出乙個可能包含重複的整數陣列,和乙個大小為 k 的滑動視窗,從左到右在陣列中滑動這個視窗,找到陣列中每個視窗內的最大值。給出陣列 1,2,7,7,8 滑動視窗大小為k 3.返回 7,7,8 解釋 最開始,視窗的狀態如下 1,2 7 7 8 最大值為7 然後視窗向右移動一位 1,2,7,7 8 最大...