目標:
主要思路:
一開始,我實現的是,遍歷視窗,移動,每次都找出該視窗的最大值,然後輸出。這種方法的時間複雜度為o(nk),理論上k是乙個定值,所以可以看作是o(n),但實際上,k從1到n,所以最差情況下,時間複雜度是o(n2),其實並不符合。
我在leetcode上檢視討論,發現很多方法其實都是o(nk)的,但有乙個是真的o(n)的演算法:
他首先將陣列按k個分組,然後巧妙地用2個陣列,分別為left_max,right_max來記錄每個位置在該小組的左邊最大值與右邊最大值。然後,遍歷一次,當前視窗的最大值,就是該視窗起始點位置的右邊最大值及終點位置的左邊最大值。
**:
1class
solution
1920 vectorresult;
21for (int i = 0; i < len - k + 1; i++)
2425
return
result;26}
27 };
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 解釋 滑動視窗的位置...