题目:
大根堆思路:
维护最大值,应该首先想到大根堆。C++中对应着priority_queue,这里用pair<int,int>来记录对应的值和在nums中的索引。所以有priority_queue<pair<int,int>> q。在大根堆中,用q.top().first即可获取最大值。对于滑动窗口有三个步骤:处理进入的元素、处理出去的元素、记录结果。直接看代码吧,很清晰的。
代码
cpp
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
//大根堆
priority_queue<pair<int,int>> q;
//初始化大根堆
for(int i=0;i<k;i++){
q.emplace(nums[i],i);
}
//初始化res
vector<int> res={q.top().first};
//处理后续窗口
int len=nums.size();
for(int i=k;i<len;i++){
//进入
q.emplace(nums[i],i);
//出去
while(q.top().second<=i-k){
q.pop();
}
//记录答案
res.push_back(q.top().first);
}
return res;
}
};
对于priority_queue,增添元素为emplace,删除元素为pop。
明天将继续更新怎么用python实现最小堆/最大堆,怎么用C++实现最小堆,怎么用双端队列解决这道题,以及力扣---岛屿数量。