当前位置: 首页 > article >正文

滑动窗口经典例题

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

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

输入描述:

第一行两个数,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

10 20
1 1 6 10 9 3 3 5 3 7

输出

复制3 5

3 5

import java.io.*;
import java.util.*;
public class Main{
    public static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    public static Read sc = new Read();
    public  static void  main(String [] args) throws IOException {
        int n= sc.nextInt();
        int x= sc.nextInt();
        //输入数组元素
        int [] array=new int [n+1];
        for(int i=1;i<=n;i++)array[i]=sc.nextInt();
        //start
        int ret=Integer.MAX_VALUE;//最小距离
        int a=-1,b=-1;//保存最后结果
        int left=1,right=1,sum=0;
        while (right<=n&&left<=n){
            if(sum<x)sum+=array[right];
           while (sum>=x){
                 if(right-left+1<ret){
                    a=left;b=right;
                    ret=right-left;
                }
                sum=sum-array[left];
                left++;
            }
            right++;
        }
        System.out.println(a+" "+b);
    }
}
class Read // 自定义快速读入
{
    StringTokenizer st = new StringTokenizer("");
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    String next() throws IOException
    {
        while(!st.hasMoreTokens())
        {
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }

    String nextLine() throws IOException
    {
        return bf.readLine();
    }

    int nextInt() throws IOException
    {
        return Integer.parseInt(next());
    }

    long nextLong() throws IOException
    {
        return Long.parseLong(next());
    }

    double nextDouble() throws IOException
    {
        return Double.parseDouble(next());
    }
}


http://www.kler.cn/a/350556.html

相关文章:

  • 微服务入门:从零开始构建你的微服务架构
  • 数据库服务体系结构
  • 使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程
  • [创业之路-254]:《华为数字化转型之道》-1-华为是一个由客户需求牵引、高度数字化、高度智能化、由无数个闭环流程组成的价值创造、评估、分配系统。
  • 华为数据中心CE系列交换机级联M-LAG配置示例
  • 【ArcGIS微课1000例】0140:总览(鹰眼)、放大镜、查看器的用法
  • 【CSS in Depth 2 精译_046】7.1 CSS 响应式设计中的移动端优先设计原则(下)
  • 奖金——Topsort
  • 基于STM32的自学习走迷宫智能小车设计
  • 空间限域效应
  • Java基础14-网络编程
  • 基于springboot学生成绩管理系统
  • linux系统,不定时kernel bug :soft lockup的问题
  • android studio导入外部项目
  • 24/10/12 算法笔记 汇聚层
  • mysqlRouter读写分离
  • 常用分布的数学期望、方差、特征函数
  • linux下编译鸿蒙版boost库
  • 【2021】知识图谱导论(陈华钧)——阅读思考与笔记
  • 常见网络协议的介绍、使用场景及 Java 代码样例
  • 《深度学习》循环神经网络RNN 结构及原理解析
  • 应急响应处置流程Windows篇
  • LLM - 使用 Neo4j 可视化 GraphRAG 构建的 知识图谱(KG) 教程
  • GO 语言协程知识点学习笔记
  • 进程通信——管道
  • 中国平安蝉联2024“金融业先锋30”第一名 获金融业ESG最高五星评级