Skip to content

Commit fba159b

Browse files
committed
0239.滑动窗口最大值.md 加入 Python 版本解法二:直接用单调队列
1 parent 42d84f8 commit fba159b

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

problems/0239.滑动窗口最大值.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ class Solution {
299299
```
300300

301301
### Python:
302-
302+
#### 解法一:使用自定义的单调队列类
303303
```python
304304
from collections import deque
305305

@@ -339,6 +339,36 @@ class Solution:
339339
return result
340340
```
341341

342+
#### 解法二:直接用单调队列
343+
```python
344+
from collections import deque
345+
346+
347+
class Solution:
348+
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
349+
max_list = [] # 结果集合
350+
kept_nums = deque() # 单调队列
351+
352+
for i in range(len(nums)):
353+
update_kept_nums(kept_nums, nums[i]) # 右侧新元素加入
354+
355+
if i >= k and nums[i - k] == kept_nums[0]: # 左侧旧元素如果等于单调队列头元素,需要移除头元素
356+
kept_nums.popleft()
357+
358+
if i >= k - 1:
359+
max_list.append(kept_nums[0])
360+
361+
return max_list
362+
363+
364+
def update_kept_nums(kept_nums, num): # num 是新加入的元素
365+
# 所有小于新元素的队列尾部元素,在新元素出现后,都是没有价值的,都需要被移除
366+
while kept_nums and num > kept_nums[-1]:
367+
kept_nums.pop()
368+
369+
kept_nums.append(num)
370+
```
371+
342372
### Go:
343373

344374
```go

0 commit comments

Comments
 (0)