蓝桥杯 美丽的区间 尺取法 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); } } }

浙公网安备 33010602011771号