一、题目
二、思路
方法一:利用max_element函数求得窗口中最大值
方法二:采用优先队列
优先队列存储pair键值对,num[i]和i
当优先队列的头的序号不在窗口范围内,就弹出
三、代码
max_element
class Solution {
public:
vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
vector<int>res;
//出现滑动创接口大于数组大小或者滑动窗口为0
if(size>num.size() || size==0)
{
return res;
}
//储存滑动窗口的最大值
vector<int>dp(num.size()-size+1,0);
for(int i=size-1;i<num.size();++i)
{
dp[i-size+1]=*max_element(num.begin()+i-size+1,num.begin()+i+1);
}
return dp;
}
};
优先队列:
class Solution {
public:
vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
vector<int>res;
//出现滑动窗口大于数组大小或者滑动窗口为0
if(size>num.size() || size==0)
{
return res;
}
//储存滑动窗口的最大值
priority_queue<pair<int,int>>Queue;
//添加滑动窗口
for(int i=0;i<size-1;++i)
{
Queue.emplace(num[i],i);
}
//找出最大值
for(int i=size-1;i<num.size();++i)
{
Queue.emplace(num[i],i);
//当最大值不在窗口内,就弹出
while(Queue.top().second<i-size+1)
{
Queue.pop();
}
//添加到输出容器
res.emplace_back(Queue.top().first);
}
return res;
}
};