給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , ,
leetcode對應題目:239. 滑動視窗最大值
題目解答
總結:用k來表示size。
使用deque儲存視窗中最大值的下標,如果直接儲存最大值,當視窗向後移動,還需要判斷刪除的值是不是最大值。如果使用index,既可以通過index索引到最大值,又可以通過設定i-index和k的關係,從而來判斷視窗是否應該向後移動了。兩者都是下標,當兩者之差等於k,則說明其中已經有三個元素了,該向後挪動了。
並且deque當中儲存的是有用的index,什麼是有用?deque的最後乙個元素表示的是最近的乙個視窗中最大值的下標,如果新的乙個元素num[i]>num[q.back()],表示這個值更大,自然可以把當前視窗的最大值更新:把這個最大值的index從佇列中刪除。不用擔心一直刪除是否會影響前面的視窗,比如某個數值特別大,比以前視窗的值最大值都大。因為到達視窗容量之後,每移動一步就儲存下了當前視窗的最大值。
class solution ;
dequeq;
vectorres;
for(int i = 0;i= size-1) res.push_back(num[q.front()]);
}return res;
}};
64 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 思路 暴力解法,時間複雜度o kn 不可取。用三個堆疊,其中兩個堆疊負責模擬佇列,存放劃窗內的數,另乙個堆疊存放當前最大值,...
64 滑動視窗的最大值
題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 class solution 思路就是採用雙端佇列,佇列中的頭節點儲存的資料比後面的要大。比如當前假如的資料比隊尾...
64 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 classname solution description todo date 2019 12 23 16 32 auth...