问题:
题目来源:力扣(LeetCode)
难度:困难
分析:
本题解提供堆、双端队列和动态规划三种解法,双端队列写法参考力扣国际站光头哥的解法,太优美了。
解决方法:
1:堆
python内置的堆是最小堆,所以在元素入堆的时候取负,以便求最大值。另外我们需要判断最大值是否在当前的窗口内,所以需要索引值,在入堆的时候一起存入。每次取堆内最大值,也就是堆顶元素的时候,检查索引值是否是在窗口内的。
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
res, heap = [], []
for i in range(len(nums)):
heapq.heappush(heap, (-nums[i], i))
if i + 1 >= k: