Leetcode293 滑動視窗的最大值

2021-10-24 05:31:09 字數 1392 閱讀 4003

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。

返回滑動視窗中的最大值。

示例:

輸入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3

輸出: [3,3,5,5,6,7]

解釋:

滑動視窗的位置 最大值

--------------- -----

[1 3 -1] -3 5 3 6 7 3

1 [3 -1 -3] 5 3 6 7 3

1 3 [-1 -3 5] 3 6 7 5

1 3 -1 [-3 5 3] 6 7 5

1 3 -1 -3 [5 3 6] 7 6

1 3 -1 -3 5 [3 6 7] 7

一、暴力求解,一層迴圈遍歷n-k+1次,二層迴圈遍歷k的長度,時間複雜度為o(nk),存在的問題就是在視窗移動的過程中,存在元素重複的情況,k很大的時候非常明顯效率很低。

二、使用單調的雙向佇列,維護的佇列支援雙端操作,元素在入隊出隊的時候保證o(1)的時間操作,並且我們需要淘汰掉永遠不可能是當前的答案的元素。

//暴力解 時間複雜度上面   (n-k+1) * k  存在問題,大量的重複比較

public

int[

]maxslidingwindow

(int

nums,

int k)

return res;

}

//單調雙端佇列 deque o(n)  單詞滑動視窗獲取最大值 o(1)  max --> min

//將永遠沒有機會的消除, 減少重複的比較

public

int[

]solve

(int

nums,

int k)

//移除尾部小於當前值的元素

while

(!dq.

isempty()

&& nums[i]

>= nums[dq.

getlast()

])//尾部加入,滑動視窗向右擴充

dq.addlast

(i);

//從頭部返回極大值

if(i >= k -1)

}return res;

}

滑動視窗leetcode

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。返回滑動視窗最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大值 1 ...

leetcode 滑動視窗

面試題57 ii.和為s的連續正數序列 題目 輸入乙個正整數 target 輸出所有和為 target 的連續正整數序列 至少含有兩個數 序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。題解 摘自 什麼是滑動視窗 滑動視窗可以看成陣列中框起來的乙個部分。在一些陣列類題目中,我們可以用滑動...

leetcode 滑動視窗

3.無重複字元的最長子串 給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pww...