华为题:滑动窗口最大值

给定一个整数数组 nums 和一个整数 k,请找出所有长度为 k 的滑动窗口中的最大值。

输入描述

第一行输入一个整数 n,表示数组长度。

第二行输入 n 个整数,表示数组 nums。

第三行输入一个整数 k。

输出描述

输出每个滑动窗口的最大值,用空格分隔。

示例 1

输入

text

复制代码
8
1 3 -1 -3 5 3 6 7
3

输出

text

复制代码
3 3 5 5 6 7

C++ 解法

cpp

复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;

    vector<int> nums(n);
    for (int i = 0; i < n; i++) cin >> nums[i];

    int k;
    cin >> k;

    deque<int> dq;
    vector<int> ans;

    for (int i = 0; i < n; i++) {
        while (!dq.empty() && dq.front() <= i - k) dq.pop_front();
        while (!dq.empty() && nums[dq.back()] <= nums[i]) dq.pop_back();

        dq.push_back(i);

        if (i >= k - 1) ans.push_back(nums[dq.front()]);
    }

    for (int i = 0; i < (int)ans.size(); i++) {
        if (i) cout << " ";
        cout << ans[i];
    }
    cout << endl;

    return 0;
}
相关推荐
2601_965742221 小时前
AI是怎么判断一家本地商家值得推荐的?云南老板看完这篇就懂了
大数据·人工智能·算法·ai·新媒体运营
小O的算法实验室1 小时前
IEEE TAES,基于DQN 辅助的集群无人机自组网约束多目标重构与优化
人工智能·算法
菩提树下的凡夫1 小时前
OPenCV4.8与OpenCV5.0的区别
c++·opencv
要练八块腹肌2 小时前
map和set介绍与使用
c++
m0_547486662 小时前
《数据结构 (C语言)》期末试卷及答案(10套)2026版
c语言·开发语言·数据结构
_不会dp不改名_2 小时前
leetcode_3727 最大平方交替和
linux·算法·leetcode
白杨尚青2 小时前
C++入门篇(十七):priority_queue 完整模拟实现——仿函数、区间建堆与指针特化(附完整代码仓库)
开发语言·c++·stl·仿函数
信奥卷王2 小时前
[GESP202509 六级] 货物运输(含视频)
算法
啦啦啦啦啦zzzz2 小时前
分布式存储----缓存组
linux·服务器·c++·分布式·缓存