題目描述:給定乙個陣列和滑動視窗k的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。分別找出這6個滑動視窗中的最大值,並儲存到乙個列表中。
最簡單的思路就是分別找到這些滑動視窗,並用乙個陣列來儲存,然後找出每個陣列的最大值,但是因為比較每個陣列需要時間複雜度為o(k),滑動視窗滑動的時間複雜度為o(n),所以總的時間複雜度為o(nk);
那麼我們希望在視窗滑動的同時,進行最大值的更新,那麼可以使用乙個雙向的佇列來儲存滑動視窗中的值,使最大值總是在雙向佇列的頭部,新的元素和對尾的元素比較,如果隊尾的元素小於新的元素,就把隊尾的元素刪除,然後從隊尾加入新的元素。但是怎麼判斷在佇列頭的最大值是否過期呢,那麼這就需要在雙向佇列中儲存的是元素的下標,當發現佇列頭部的元素下標和當前下標的差值大於滑動視窗的大小的時候,說明該最大值過期,應該把他從佇列頭部刪除掉。
實現的**如下:
public class solution
while(!adeque.isempty() && num[i]>=num[adeque.peeklast()])
adeque.add(i);
if(begin >= 0)
}return alist;
}}
佇列的最大值 劍指Offer
題目描述 定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 題解 我對於這道題,剛開始看的稍微有點懵,後來才知道是描...
劍指Offer 佇列的最大值
請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例 1 輸入 maxqueue push back push ...
劍指offer之佇列的最大值
題目描述 請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例 1 輸入 maxqueue push back ...