「笔试刷题」:dd爱框框

ops/2024/10/21 9:25:16/

一、题目

题目描述

读入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

输出

3 5

二、思路解析

这道题是求连续区间的,看到的第一眼,就都要想起 “滑动窗口” 这一算法

我们可以使用双指针技巧来解决这个问题。具体步骤如下:

  1. 初始化两个指针 left 和 right,初始位置都为数组的起始位置。
  2. 维护一个变量 sum,表示当前区间内子数组的和。
  3. 不断移动 right 指针,将元素加入当前区间,并更新 sum。
  4. 当 sum 大于等于 x 时,移动 left 指针,缩小区间范围,并更新 sum,直到区间不再满足 sum 大于等于 x 的条件。
  5. 在每次移动 left 和 right 指针时,记录满足条件的区间的最小长度和对应的左右边界。
  6. 最终得到的就是满足条件的最小区间。

并且,要注意的一点就是,这道题的数据量会比较大,且传统的 Scanner 读取会耗费比较大的时间,所以我们需要通过重写 IO 流,来提高我们的输入输出效率。

模版我也放在这啦👇

import java.util.*;
import java.io.*;public class Main
{public static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in = new Read();public static void main(String[] args) throws IOException{// 写代码out.close();}
}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());}
}

三、完整代码

import java.util.*;
import java.io.*;public class Main{public static void main(String[] args) throws IOException{Read in = new Read();int n = in.nextInt();int x = in.nextInt();int[] nums = new int[n + 1];for(int i = 1; i <= n; i++){nums[i] = in.nextInt();}int left = 1, right = 1;int sum = 0;int retleft = -1, retright = -1, retLen = n;while(right <= n){sum += nums[right];while(sum >= x){if(right - left + 1 < retLen){retleft = left;retright = right;retLen = right - left + 1;}                sum -= nums[left++];}right++;}System.out.println(retleft + " " + retright);}}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.ppmy.cn/ops/15897.html

相关文章

Elasticsearch:崭新的打分机制 - Learning To Rank (LTR)

警告&#xff1a;“学习排名 (Learning To Rank)” 功能处于技术预览版&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但此功能不受官方 GA 功能的支持 SLA 的约束。 注意&#xff1a;此功能是在版本 8.12.0 中引入的&#xff0c;并且仅适…

T1级,生产环境事故—Shell脚本一键备份K8s的YAML文件

大家好&#xff0c;我叫秋意零。 最近对公司进行日常运维工作时&#xff0c;出现了一个 T1 级别事故。导致公司的“酒云网”APP的无法使用。我和我领导一起搞了一个多小时&#xff0c;业务也停了一个多小时。 起因是&#xff1a;我的部门直系领导&#xff0c;叫我**删除一个 …

uniapp 安卓批量异步权限授权,没有授权就跳系统App设置页

首先需要一个js的sdk&#xff1a;App权限判断和提示 - DCloud 插件市场 下载下来&#xff0c;引入里面的 permission.js 示例代码&#xff1a; <script>import { requestAndroidPermission } from ./sdk/permission.jsexport default {onLaunch(e) {const getMutiPer…

自动化测试定位不到元素怎么办?

1.动态id定位不到元素 分析原因&#xff1a;每次打开页面&#xff0c;ID都会变化。用ID去找元素&#xff0c;每次刷新页面ID都会发生变化。 解决方案&#xff1a;推荐使用xpath的相对路径方法或者cssSelector查找到该元素。 2.iframe原因定位不到元素 分析原因&#xff1a;…

网络编程

网络编程 当数据交给上一层的时候&#xff0c;是由哪个协议负责进行解析呢&#xff1f;&#xff1f; 比如&#xff0c;数据链路层>网络层&#xff0c;交给IPv4解析&#xff1f;IPv6解析&#xff1f;网终层>传输层交绘TCP解析还是IDP2。 socket>操作系统提供的网络编…

运行ConvE遇到的两个问题

1.在安装requirement时&#xff0c;发现他是从远程拉取需要下载的包的目录&#xff0c;结果下载的sklearn过时了&#xff0c;报错。 解决办法&#xff1a; 我们无法修改安装的包名&#xff0c;只能忽略这个错误 linux系统输入&#xff1a;export SKLEARN_ALLOW_DEPRECATED_S…

Apollo核心原理之眼前一亮

Apollo配置中心的实现原理&#xff0c;apollo的发布配置推送变更消息就是用DeferredResult实现的。它的大概实现步骤如下&#xff1a; apollo客户端会像服务端发送长轮询http请求&#xff0c;超时时间60秒当超时后返回客户端一个304 httpstatus,表明配置没有变更&#xff0c;客…

【prometheus学习过程】

目录 一、linux服务器监控常用的监控指标 二、监控docker1、使用CAdvisor2.配置prometheus采集docker的样本数据3.添加触发器3.添加触发器 三、监控MySQL容器1.创建普通用户向数据库授予权限2.Docker部署部署MySQLD Exporter二进制安装mysqld-exporter 四、进程监控1、process …