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

2021-08-04 14:55:37 字數 641 閱讀 7699

題目描述

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