LeetCode每日一题,239. Sliding Window Maximum
先看题目描述
大意就是给定一个数组 nums,还有一个大小为 k 的窗口从最左侧滑到最右侧,滑动窗口每次只向右移动一位,返回滑动窗口中的最大值
算法和思路
优先队列
看到最大值,很容易就想到用优先队列,可以用优先队列中的大根堆来实时维护一系列元素中的最大值
大致思路就是先将 nums 中的前 k 个元素放入大根堆中,每当我们向右移动滑动窗口时,就把一个新的元素放入大根堆中,此时堆顶元素就是堆中所有元素的最大值,但是堆顶元素不一定在滑动窗口中,若堆顶元素在滑动窗口左边界的左侧,就不在滑动窗口中,此时就不断删除堆顶元素直至堆顶元素在滑动窗口中,然后就找到了此时的滑动窗口中的最大值。每次向右移动滑动窗口时重复此过程即可。为了判断堆顶元素是否在滑动窗口中,我们需要在堆中存储二元组,二元组中放元素的下标和值
算法源码
优先队列
1 | class Solution { |
下面是一开始实现的优先队列方法的代码,但是提交的时候跑超时了
1 | class Solution { |