HJ176 【模板】滑动窗口

  • 题目
  • 题解(21)
  • 讨论(8)
  • 排行

中等 通过率:49.56% 时间限制:3秒 空间限制:256M

知识点双指针

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

给定一个长度为 nn 的整数数组 aa 和一个窗口大小 kk (1≦k≦n)(1≦k≦n)。滑动窗口从左到右移动,每次右移一位(窗口覆盖下标 i,i+k−1i,i+k−1)。对于数组的每一个窗口位置,求出窗口内元素的最大值。

输入描述:

第一行输入两个整数 n,k(1≦k≦n≦2×105)n,k(1≦k≦n≦2×105)。

第二行输入 nn 个整数 a1,a2,...,ana1​,a2​,...,an​,元素范围 1≦ai≦1091≦ai​≦109。

输出描述:

输出共 n−k+1n−k+1 个整数,为每个滑动窗口的最大值,数之间以单个空格分隔。

示例1

输入:

复制代码
10 3
2 13 6 19 15 13 17 9 19 13

复制输出:

复制代码
13 19 19 19 17 17 19 19

复制

示例2

输入:

复制代码
10 1
13 13 5 3 9 19 18 4 17 3

复制输出:

复制代码
13 13 5 3 9 19 18 4 17 3

复制

示例3

输入:

复制代码
10 10
15 20 5 20 19 1 4 18 14 15

复制输出:

复制代码
20
cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

int main() {
    //输入数据
    int n, k;
    cin >> n >> k;
    vector<int> a;//接受数组
    for(int i = 0; i < n; i++){
        int tmp;
        cin >> tmp;
        a.push_back(tmp);
    }
    //双指针遍历序列a,同时用loc指针记录历史最大值位置
    int loc = -1;
    int left = 0;
    int right = k - 1;
    while(right < n){
        int max = 0;//存储最大值
        if(loc >= left){//loc还在窗口内只需要比较最新的值和loc指向的值的大小并更新max和loc的值  
           max = a.at(loc);
           if(a.at(right) > max){
              max = a.at(right);
              loc = right;
           }
        }
        else{//loc不在窗口内就遍历新窗口获取max值并更新loc值
            for(int j = left; j <= right; j++){
                if(a.at(j) > max){
                    max = a.at(j);
                    loc = j;
                }
            }
        }
        cout << max << " ";
        left++;
        right++;
    }
    cout << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")
相关推荐
huang57914718 分钟前
哈希算法的抗碰撞机制与安全性增强策略4
算法
林浩杨_39 分钟前
SIGIR 2026|南京大学:Video-GAR:“通过生成 Query 来验证视频语义理解”的生成增强范式
论文阅读·人工智能·算法
Elsa️7461 小时前
算法一周刷题总结
c++·算法
风合星语1 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
小羊没烦恼!1 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#
小小程序猴11 小时前
深圳乘路资讯AI培训怎么样?课程靠谱吗?——一套课程可信度评估模型与实证分析
人工智能·算法
云上先途1 小时前
标签化服务适合哪些人?常见适用场景一次讲清
大数据·人工智能·算法·音视频
welfare9622 小时前
新号别搞:内存管理+模板初阶+STL简介
开发语言·c++
彧azz2 小时前
DFS与BFS:图遍历的两大核心算法
数据结构·学习·算法·深度优先·广度优先
宣宣猪的小花园.2 小时前
【机器学习】损失函数与梯度下降:机器如何通过“犯错”不断变好
人工智能·算法·机器学习