62.滑动窗口的最大值
题目内容:
代码及思路:
#include<iostream>
#include<vector>
#include<deque>
using namespace std;
class Solution {
public:
vector<int> maxwindow(vector<int> nums,int k)
{
vector<int> maxwindow;
if (nums.size() < k)
return maxwindow;
//设计一个队列用来存放可能为最大值的下标
deque<int> index;
for (int i = 0; i < k; i++)
{
if (!index.empty() && nums[i] >nums[index.back()])
index.pop_back();
index.push_back(i);
}
for (int j = k; j < nums.size(); j++)
{
maxwindow.push_back(nums[index.front()]);//队列头存放着最大值
while (!index.empty() && nums[j] >=nums[index.back()])
index.pop_back();
if (!index.empty() && (j - index.front()) >= k)
index.pop_front();
index.push_back(j);
}
maxwindow.push_back(nums[index.front()]);
return maxwindow;
}
};
void main()
{
Solution* object = new Solution();
vector<int> l1;
int number;
char ch;
do
{
cin >> number;
l1.push_back(number);
cin.get(ch);
} while (ch == ',');
int k;
cin >> k;
vector<int> res = object->maxwindow(l1, k);
}