mirror of
https://github.com/labuladong/fucking-algorithm.git
synced 2025-07-05 03:36:39 +08:00
[239.滑动窗口最大值] [Python]
This commit is contained in:
@ -210,4 +210,52 @@ vector<int> maxSlidingWindow(vector<int>& nums, int k) {
|
|||||||
<img src="../pictures/qrcode.jpg" width=200 >
|
<img src="../pictures/qrcode.jpg" width=200 >
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
======其他语言代码======
|
======其他语言代码======
|
||||||
|
|
||||||
|
python3版本
|
||||||
|
|
||||||
|
```python
|
||||||
|
from collections import deque
|
||||||
|
|
||||||
|
class MonotonicQueue(object):
|
||||||
|
def __init__(self):
|
||||||
|
# 双端队列
|
||||||
|
self.data = deque()
|
||||||
|
|
||||||
|
def push(self, n):
|
||||||
|
# 实现单调队列的push方法
|
||||||
|
while self.data and self.data[-1] < n:
|
||||||
|
self.data.pop()
|
||||||
|
self.data.append(n)
|
||||||
|
|
||||||
|
def max(self):
|
||||||
|
# 取得单调队列中的最大值
|
||||||
|
return self.data[0]
|
||||||
|
|
||||||
|
def pop(self, n):
|
||||||
|
# 实现单调队列的pop方法
|
||||||
|
if self.data and self.data[0] == n:
|
||||||
|
self.data.popleft()
|
||||||
|
|
||||||
|
|
||||||
|
class Solution:
|
||||||
|
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
|
||||||
|
# 单调队列实现的窗口
|
||||||
|
window = MonotonicQueue()
|
||||||
|
|
||||||
|
# 结果
|
||||||
|
res = []
|
||||||
|
|
||||||
|
for i in range(0, len(nums)):
|
||||||
|
|
||||||
|
if i < k-1:
|
||||||
|
# 先填满窗口前k-1
|
||||||
|
window.push(nums[i])
|
||||||
|
else:
|
||||||
|
# 窗口向前滑动
|
||||||
|
window.push(nums[i])
|
||||||
|
res.append(window.max())
|
||||||
|
window.pop(nums[i-k+1])
|
||||||
|
return res
|
||||||
|
|
||||||
|
```
|
Reference in New Issue
Block a user