思路:用乙個雙端佇列儲存在滑動視窗裡的元素下標。保證隊首元素是滑動視窗的最大值的下標。
當新元素進入佇列時,如果隊尾的元素不比新元素大,那麼就將隊尾元素彈出。因為該元素不如新元素大,生存能力又不如新元素強。
新元素進隊後,就可以判斷隊頭元素是否需要出隊。如果出隊,新的隊頭元素就是此時的所求。
vector<
int>
maxslidingwindow
(vector<
int>
& nums,
int k)
//隊首元素就是此時的最大值
res.
push_back
(nums[que.
front()
]);//處理後面的元素,每次for迴圈都會輸出一次
for(
int i=k;i
size()
;++i)
return res;
}
239 滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大...
239 滑動視窗最大值
239.滑動視窗最大值 solution deque solution maxindex 暴力法的時間複雜度為 o n k 弊端為每次掃瞄視窗的最大值,每兩次掃瞄之間都會存在重複的值比較,已經知道了他們的最大值是誰了,所以要減少比較次數 為什麼新增的是索引 將i加到隊尾 deque.addlast ...
239 滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。高階 示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置...