滑动窗口法
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
if(nums.empty())return nums;
vector<int>out;
int n=nums.size();
int order=0;
for(int i=0;i<=n-k;i++){
if(i>order)order=i;
for(int j=order;j<i+k;j++)if(nums[order]<=nums[j])order=j;
out.emplace_back(nums[order]);
}
return out;
}
};
优先队列
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
if(nums.empty())return nums;
vector<int>out;
int n=nums.size();
priority_queue<pair<int,int>>order;
for(int i=0;i<k;i++)order.emplace(nums[i],i);
out.emplace_back(order.top().first);
for(int i=1;i<=n-k;i++){
order.emplace(nums[i+k-1],i+k-1);
while(order.top().second<i)order.pop();
out.emplace_back(order.top().first);
}
return out;
}
};