class Solution
{public:vector<int> maxSlidingWindow(vector<int>& nums, int k)
{ vector<int> res;
if (nums.size() == 0)
{
return res;
}
if (k == 1)//长度为1,就是自身
{
return nums;
}
deque<int> maxque;
maxque.push_back(nums[0]);
int maxk = nums[0];
for (int i = 1; i < k; i++)
{
if (i == nums.size()) //万一k比nums的个数还要大
{
res.push_back(maxk);
return res;
}
if (maxk < nums[i])
{
maxk = nums[i];
}
while (!maxque.empty() && nums[i] > maxque.back())//从尾部开始把每个小于nums[i]的数去除。 {
maxque.pop_back();
}
maxque.push_back(nums[i]);
}
res.push_back(maxk);//第一个窗口的最大值
for (int i = k; i < nums.size(); i++)
{
if (nums[i - k] == maxque.front())//nums[i-k]移出窗口,如果队列头是nums[i-k]就要去除掉
{ maxque.pop_front(); }
while (!maxque.empty() && nums[i] > maxque.back())//从尾部开始把每个小于nums[i]的数去除。 { maxque.pop_back(); }
maxque.push_back(nums[i]);
res.push_back(maxque.front()); }
return res;}};
滑动窗口最大值
最新推荐文章于 2025-08-26 18:00:05 发布
本文介绍了一种求解滑动窗口中最大值的高效算法。通过使用双端队列来跟踪窗口内的最大元素,避免了对窗口内所有元素进行重复比较。该算法在遍历数组时动态更新队列,确保队列头部始终为当前窗口的最大值。
623

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



