給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小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 最大...