【笔试】算法的暴力美学——牛客 NC221681:dd爱框框

一、题目描述

二、算法原理

思路:滑动窗口

1)定义两个指针,一开始都为0,cur 从左开始遍历,定义一个 sum 来表示 prev 到 cur 的之间的值的总和,当 sum >= x 时,我们要根据题目条件来保存 prev 和 cur 的值;

2)当 sum >= x 时,我们记录完 prev 和 cur 的值的之后,sum -= arr prev ,prev++ ,往后走,只要满足条件 sum >= x 我们就要记录 prev 和 cur 的值,不断重复上面的工作;

3)当 sum < x 时,cur++,sum += arr cur ;

4)直至遍历完整个数组;

三、代码实现

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

int main()
{
    //准备工作
    int n,x;
    cin >> n >> x;
    vector<int> arr(n,0);
    
    for(int i = 0; i < n; i++) cin >> arr[i];
    int index[2] = {0};//保存最后的结果
    
    //滑动窗口
    int cur = 0;
    int prev = 0;
    int sum = 0;
    while(cur < n)
    {
        sum += arr[cur];
        while(sum >= x)//入窗口
        {
            if(index[0] == 0 && index[1] == 0)
            {
                index[0] = prev;
                index[1] = cur;
                sum -= arr[prev++];
                continue;
            }
            int length = index[1] - index[0];
            int camplen = cur - prev;
            if(length == camplen || length > camplen)
            {
                if(prev < index[0] || length > camplen)
                {
                    index[0] = prev;
                    index[1] = cur;
                }
            }
            sum -= arr[prev++];
        }
        //出窗口
        cur++;
    }
    
    cout << index[0] + 1 << ' ' << index[1] + 1 << endl;
    
    return 0;
}
相关推荐
波力海苔夹心脆67521 分钟前
VisionPro 与 VisionMaster 对比(上):软件定位、开发环境与核心视觉工具对照
图像处理·算法·计算机视觉·c#·视觉检测·个人开发·vp9
动词ing24 分钟前
【题目练习】盛最多水的容器
算法·目标检测
海绵宝宝转agent25 分钟前
2026-10-14算法+面经总结
java·笔记·算法·缓存
虚无的纽扣25 分钟前
【力扣刷题】第四天:三数之和、四数之和
算法·leetcode·职场和发展
ZiLing34 分钟前
2026 ROS 2 Lyrical 工程实例(一):从零搭建 AMR 激光 SLAM——Gazebo、slam_toolbox 与 Nav2 全链路跑通
算法
巴糖34 分钟前
为什么你的大模型总在胡说八道?—— top_k /top_p/temperature 调参实战手册
算法
rou40 分钟前
LeetCode410.分割数组的最大值
算法
垆边人似月.41 分钟前
华为题:字符串中最长连续数字串
开发语言·c++·算法
_不会dp不改名_43 分钟前
leetcode_3273 数位平方和的最大值
算法·leetcode·职场和发展
vivo互联网技术44 分钟前
SSR-Merge:把 LoRA 合并从"参数算术"变成"信号路由" | ICML 2026
人工智能·算法·计算机视觉