給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。
這道題我們需要轉換下參考物件,像物理學中一樣。
題目描述的是滑動視窗在陣列上移動。如果我們以滑動視窗為物件,那麼就是陣列在滑動視窗上移動。
顯然,可以看出滑動視窗就是乙個佇列,陣列中的乙個乙個的數先進去,先出來。
此外這題還有乙個可以優化的一點就是不一定需要把所有數字存進去佇列裡,只需要把以後有可能成為最大值的數字存進去。
還有一點要注意的是佇列裡儲存的是下標,而不是實際的值,因為視窗移動主要是下標的變化
當然還有其他解法,比如利用兩個棧去實現這個佇列,從而使得查詢時間複雜度降低到o(n)
functionmaxinwindows(num, size)
let begin;
let queue =;
for(let i = 0; i < num.length; i++)
else
if(begin > queue[0])
while((queue.length != 0) && (num[queue[queue.length - 1]] <=num[i]))
queue.push(i);
if(begin >= 0)
}return
res;
}
劍指offer 64 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 滑動視窗應當是佇列,但為了得到滑動視窗的最大值,佇列序可以從兩端刪除元素,因此使用雙端佇列。原則 對新來的元素k,將其與雙端...
劍指offer64 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 不能每次選取範圍再比較,這樣時間複雜度太高。可以建立乙個佇列,佇列首部是最大值索引,每次要先去掉小於當前數的所有索引,再去掉...
劍指offer64 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 視窗大於陣列長度的時候,返回空 示例1輸入 2,3,4,2,6,2,5,1 3 返回值 4,4,6,6,6,5 思路1 暴力...