辅导课堂在推进质量建设,需要分析每堂直播课的用户报障数量。
当连续多个课堂的报障数量之和大于一个数s的时候,系统发出警报,计算最长连续的没有触发警报的课程数量。
输入描述:
第一行两个整数: n, s
第二行n的整数: 每个整数ai表示该课堂的报障数量
对于10%的数据,满足1<=n<2*10^3
对于100%的数据,满足1<=n<=2*10^6, 1<=ai<=10^2
input:
3 2
1 1 3
output:
2
说明: 前两堂课的报障数量为1,总和为2, 没有触发警报
input:
6 5
5 1 1 1 2 3
output:
4
说明: 中间4堂课的报障数量之和为1+1+1+2=5, 没有触发警报
分析: 此问题可简化为和不超过s的最长连续子数组问题,设置两个指针left, right,遍历
//课程质量建设
//n, s
//n个数字组成的序列,最长连续子序列和<=s
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int s = scanner.nextInt();
int[] arr = new int[n];
int[] dp = new int[n];
int res = 0;
for(int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
int sum = 0, left = 0, right = 0;
for(; right < n; right++) {
sum += arr[right];
if (sum <= s) {
res = Math.max(res, right-left+1);
}
while (left < right && sum > s) {
sum -= arr[left++];
}
}
System.out.println(res);
}