一:暴力解法,能ac但是時間複雜度o(nk)
class二,維護乙個特殊的優先佇列(使用deque實現)假設當前佇列已經是優先佇列(最大值在隊首),而且這個佇列是有序遞減的,那麼當新加入乙個元素時執行兩個操作,solution ;
vector
res;
for(int i=0;i<=len-k;i++)
res.push_back(key);
}return
res;}};
1)檢查隊首下標是否合法,假如隊首下標已經不在滑窗內,則將其彈出;
2)檢查已有的佇列中的元素是否比當前元素小,小的元素全部彈出。由於已經是按值有序遞減的數列,那麼只需要不斷的比較末尾和當前元素,即可完成該項;
此時已經對新進入的元素維護好了乙個最大元素下標在隊首,元素下標按值有效遞減,且下標從左到右是有序的的乙個佇列;獲取隊首元素可得當前滑窗的大小;
classsolution ;
vector
res;
deque
dq;int len=nums.size();
for(int i=0;i)
dq.push_back(i);
//當前的有效下降子串行已經維護好;
if(i>=k-1
) }
return
res;}};
LeetCode 239 滑動視窗最大值
class solution public int maxslidingwindow int nums,int k int numlen nums.length if nums null numlenmaxheap new priorityqueue a,b nums b nums a for in...
LeetCode 239 滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。返回滑動視窗最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1...
leetcode239滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。返回滑動視窗最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1...