LC 239 移動視窗的最大值

2022-08-31 04:33:09 字數 513 閱讀 2695

目標:

主要思路:

一開始,我實現的是,遍歷視窗,移動,每次都找出該視窗的最大值,然後輸出。這種方法的時間複雜度為o(nk),理論上k是乙個定值,所以可以看作是o(n),但實際上,k從1到n,所以最差情況下,時間複雜度是o(n2),其實並不符合。

我在leetcode上檢視討論,發現很多方法其實都是o(nk)的,但有乙個是真的o(n)的演算法:

他首先將陣列按k個分組,然後巧妙地用2個陣列,分別為left_max,right_max來記錄每個位置在該小組的左邊最大值與右邊最大值。然後,遍歷一次,當前視窗的最大值,就是該視窗起始點位置的右邊最大值及終點位置的左邊最大值。

**:

1

class

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 解釋 滑動視窗的位置...