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);
}
本文介绍了一种求解滑动窗口中最大值的高效算法。通过使用双端队列来跟踪窗口内元素的下标,确保队首始终是当前窗口内的最大值。此方法避免了重复计算,适用于动态更新的数据流。

210

被折叠的 条评论
为什么被折叠?



