跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
C++算法

牛客 NC221681 dd 爱框框 滑动窗口算法解析

牛客 NC221681 dd 爱框框问题要求寻找满足特定和条件的最小子数组。解决方案采用滑动窗口算法,利用双指针 cur 和 prev 维护窗口范围及元素总和 sum。当 sum 大于等于目标值 x 时记录当前区间并收缩左边界,否则扩展右边界。最终输出满足条件的最短区间起始与结束位置(1-based)。核心逻辑在于动态调整窗口以最小化长度同时保持和的条件。

DotNetGuy发布于 2026/3/25更新于 2026/4/265 浏览
牛客 NC221681 dd 爱框框 滑动窗口算法解析

一、题目描述

文章配图

二、算法原理

思路:滑动窗口

  1. 定义两个指针,初始化为 0,cur 从左开始遍历。定义 sum 表示 prev 到 cur 之间的值的总和。当 sum >= x 时,根据题目条件保存 prev 和 cur 的值。

文章配图

  1. 当 sum >= x 时,记录完 prev 和 cur 的值之后,sum -= arr[prev],prev++,往后走。只要满足条件 sum >= x 就要记录 prev 和 cur 的值,不断重复上述工作。

文章配图

  1. 当 sum < x 时,cur++,sum += arr[cur]。

文章配图

  1. 直至遍历完整个数组。

三、代码实现

#include <iostream>
#include <vector>
using namespace std;

int main() {
    // 准备工作
    int n, x;
    cin >> n >> x;
    vector<int> arr(n, 0);
    for (int i = ; i < n; i++) cin >> arr[i];

     index[] = {}; 
    
     cur = ;
     prev = ;
     sum = ;

     (cur < n) {
        sum += arr[cur];
         (sum >= x) { 
             (index[] ==  && index[] == ) {
                index[] = prev;
                index[] = cur;
                sum -= arr[prev++];
                ;
            }
             length = index[] - index[];
             camplen = cur - prev;
             (length == camplen || length > camplen) {
                 (prev < index[] || length > camplen) {
                    index[] = prev;
                    index[] = cur;
                }
            }
            sum -= arr[prev++];
        }
        
        cur++;
    }
    cout << index[] +  <<  << index[] +  << endl;
     ;
}
0
int
2
0
// 保存最后的结果
// 滑动窗口
int
0
int
0
int
0
while
while
// 入窗口
if
0
0
1
0
0
1
continue
int
1
0
int
if
if
0
0
1
// 出窗口
0
1
' '
1
1
return
0

目录

  1. 一、题目描述
  2. 二、算法原理
  3. 三、代码实现
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Ubuntu 20.04 手动安装 Ollama 指南
  • PHP 对接 DeepSeek API 实现指南
  • C++ 类型转换详解
  • C++ 递归实现合并两个有序链表与反转链表
  • 雷达信号处理中的 CFAR 技术详解
  • MCP 协议与 AI 智能体开发实战指南
  • C++ STL 标准库算法详解与实践
  • SpringBoot 网约车司机预约系统设计与实现
  • 海尔智能家居集成指南:设备统一管理
  • HarmonyOS Next DevEco Studio 构建任务指南
  • 前端面试题精选:闭包、事件循环与 Vue 核心原理
  • Java 后端进阶学习路线与微服务实战指南
  • Trae MySQL MCP 连接失败排查:Windows ENOENT 与认证插件兼容方案
  • Python 3D 模型加载与渲染技术指南
  • DeepSeek 与通义万相结合制作 AI 视频实战指南
  • 动态规划解决背包问题与分割等和子集
  • 使用 BFS 实现拓扑排序
  • Python 内置函数 enumerate() 详解
  • 2026 年主流 AI Agent 产品完整梳理与选型指南
  • Whisper.cpp 模型选型:从 tiny 到 large-v3-turbo 速度与准确率实测

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online