蓝桥杯 美丽的区间 尺取法 Java
题目描述
给定一个长度为 n 的序列 a1,a2⋯,an 和一个常数 S。
对于一个连续区间如果它的区间和大于或等于S,则称它为美丽的区间。
对于一个美丽的区间,如果其区间长度越短,它就越美丽。
请你从序列中找出最美丽的区间。
输入描述
第一行包含两个整数 n,S,其含义如题所述。
接下来一行包含n 个整数,分别表示1,2,⋯,a1,a2,⋯,an。
10≤N≤10510≤N≤105,1×ai≤104 ,1≤S≤108 1≤S≤108。
输出描述
输出共一行,包含一个整数,表示最美丽的区间的长度。
若不存在任何美丽的区间,则输出 00。
输入输出样例
示例 1
输入
5 6
1 2 3 4 5
输出
2
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
while((sum-arr[l])>=s){
sum -=arr[l];
l++;
min = Math.min(min, r-l+1);//记录最小的长度
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//------------读入-------
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int s = sc.nextInt();
int arr[] = new int[n];
for(int i =0;i<n;i++){
arr[i] = sc.nextInt();
}
//设[l,r]区间,将下标为r的都求和,如果sum减去l的还大于或等于s,就说明可以删去l的了
int sum =0,min = Integer.MAX_VALUE;
for(int r = 0,r=0; r<n && j<n;r++){
sum += arr[r];
while((sum-arr[l])>=s){
sum -=arr[l];
l++;
min = Math.min(min, r-l+1);//记录最小的长度
}
}
if(min == Integer.MAX_VALUE){//如果min还等于初始值,说明没有符合长度
System.out.println(0);
}else{
System.out.println(min);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理