題目描述
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。
思路:使用暴力求解方法,複雜度為o(nk)
想到之前使用棧求最小值的演算法,但是棧只能一段刪除資料,所以使用兩端佇列,始終使滑動視窗中的最大值位於隊首
class solution
index.push_back(i);//將第乙個最大值存入結果向量中
}result.push_back(num[index.front()]);
for(int i=size;i//從下標為size的資料開始處理之後的資料
while((!index.empty())&&(num[i]>=num[index.back()]))
if((!index.empty())&&(i-index.front()>=size))
index.push_back(i);//存入當前數字
result.push_back(num[index.front()]);//儲存當前視窗的最大值
}return result;
}};
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 最大...
滑動視窗的最大值 雙端佇列,O n 的時間。
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 三種解法 1.multiset,底層紅黑樹 o nlogn 小心這個容器的刪除erase 方法。2.deque 雙端佇列 o...