【题解】NowCoder dd爱框框

简介: 【题解】NowCoder dd爱框框

题目来源:牛客

dd爱框框

题目描述:

读入 nx ,给出 n 个数 a[1]a[2] ,…, a[n] ,求最小的区间 [l,r] ,使 a[l] + a[l + 1] + … + a[r] ≥ x ,若存在相同长度区间,输出 l 最小的哪个。

输入描述:

第一行两个数,n (1≤n≤10000000) , x (1≤x≤10000)

第二行n个数 a[i] (1≤a[i]≤1000)

输出描述:

输出符合条件 l,r (保证有解)

示例1

输入:10 20

   1 1 6 10 9 3 3 5 3 7

输出:3 5

解析

首先看题目,数据量是 107 级别,所以 O(n2)O(nlogn) 的就不考虑了,暴力肯定做不了,只能使用 O (n) 算法,这种题很明显的 滑动窗口 解法,只能遍历一遍数组,不能回头,要注意怎么出入窗口。

代码实现

#include<iostream>
using namespace std;
const int N = 1e7 + 10;
int arr[N];
int n, x;
int main()
{
    cin >> n >> x;
    for (int i = 1; i <= n; ++i)
    {
        cin >> arr[i];
    }
    // 当前符合条件的最小区间,窗口左边,窗口右边
    int len = N, left = 0, right = 0;
    // 区间和,最满足答案的左区间,最满足答案的右区间
    int sum = 0, ansl = 0, ansr = 0;
    // 当窗口遍历完数组时结束
    while (right <= n)
    {
      // 区间和加上新的右值
        sum += arr[right];
        // 满足条件,不断缩小窗口左边
        while (sum >= x)
        {
          // 当前的最小区间
            if (right - left + 1 < len)
            {
              // 更新答案
                ansl = left;
                ansr = right;
                len = right - left + 1;
            }
            // 缩小区间左值
            sum -= arr[left++];
        }
        // 不满足 sum >= x,准备让窗口新增数据
        ++right;
    }
    cout << ansl << ' ' << ansr;
    return 0;
}
目录
相关文章
|
4月前
|
算法 Python
【牛客网算法】NP4 格式化输出(二)答案
该文档描述了一个编程任务,要求根据输入的字符串(如&quot;niuNiu&quot;),以三种格式输出:全小写、全大写和首字母大写。可以使用Python的`.lower()`、`.upper()`和`.capitalize()`(或`.title()`)方法实现。示例输入&quot;niuNiu&quot;的输出为:&quot;niuniu&quot;,&quot;NIUNIU&quot;,&quot;Niuniu&quot;。
33 0
|
3月前
【题解】NowCoder BC149 简写单词
【题解】NowCoder BC149 简写单词
38 15
|
3月前
|
知识图谱
【题解】NowCoder BC64 牛牛的快递
【题解】NowCoder BC64 牛牛的快递
26 7
|
3月前
【题解】NowCoder AB5 点击消除
【题解】NowCoder AB5 点击消除
32 6
|
3月前
|
容器
【题解】NowCoder NC313 两个数组的交集
【题解】NowCoder NC313 两个数组的交集
29 6
|
3月前
|
存储 人工智能
【题解】NowCoder 除2!
【题解】NowCoder 除2!
27 0
|
4月前
【错题集-编程题】dd爱框框(同向双指针 / 滑动窗口)
【错题集-编程题】dd爱框框(同向双指针 / 滑动窗口)
|
存储 缓存 算法
【手绘算法】力扣 2 两数相加(Add Two Numbers)
Hi,大家好,我是Tom。一个美术生转到Java开发的程序员。今天给大家分享的是力扣题第2题,求两数相加。在解题过程中,也会手写一些伪代码。当然,如果想要完整的源码的话,可以到我的个人主页简介中获取。 这道题属于中等难度,通过率只有42%。
76 0
|
算法 Java 索引
《剑指offer》题解——week6
《剑指offer》题解——week6
47 0
《剑指offer》题解——week6
|
算法 搜索推荐 Java
《剑指offer》题解——week5
《剑指offer》题解——week5
53 0
《剑指offer》题解——week5