题目是leetcode 239 滑动窗口的最大值
class Solution {
public:
struct node
{
int num;
int index;
node(int n,int i):num(n),index(i){}
bool operator < (const node &n) const{
return this->num < n.num;
}
};
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
priority_queue<node> que;
for(int i=0;i<k;i++){
que.push(node(nums[i],i));
}
vector<int> res{que.top().num};
for(int i=k;i<nums.size();i++){
que.push(node(nums[i],i));
while(que.size() && que.top().index <= i-k){
que.pop();
}
res.push_back(que.top().num);
}
return res;
}
};
注意,这里的operator < 函数后面一定要跟const,不然会报错,这个比其他版本的记忆的东西少很多。如果要从最大堆改成最小堆,把operator < 函数里的小于号改成大于号就好了。