一串含有 c 个正整数的数组,求出有多少个下标的连续区间,它们的和大于等于x。
第一行两个整数 c x
第二行有 c 个正整数
输出一个整数,表示所求的个数
3 6
2 4 7
输出:4
对于有 3 个整数构成的数组而言,总共有 6 个下标连续的区间,他们的和分别为:
2 = 2
4 = 4
7 = 7
2 + 4 = 6
4 + 7 = 11
2 + 4 + 7 = 13
其中有 4 个和大于等于 6,所以答案等于 4
public static void main(String[] args) {
int num = 3;
int target = 6;
int[] arr = {2, 4, 7};
int sum = 0;
int right = 0, left = 0;
int count = 0;
//首先是循环在一个滑动窗口
while (right < num) {
//然后从左边开始加,但凡大于target就可以计数
sum += arr[right];
while (sum >= target) {
if (sum >= target) {
count += num - right;//这里的意思是往后越大的数也成立
}
sum -= arr[left];//这是为了保证连续,不可以跳跃相加
left++;
}
//当其不大于target时,继续加下一个大的数
right++;
}
System.out.println(count);
}