小M给你一串含有c个正整数的数组, 想让你帮忙求出有多少个下标的连续区间, 它们的和大于等于x。
输入
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。
思路:先找到子区间是刚好大于x的,由于都是正数,因此右边的个数全部加进来就行了。问题转化为求数组的连续子区间使得刚好大于x,使用labuladong的滑动窗口的方法。
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int x = s.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = s.nextInt();
}
int left = 0;
int right = 0;
long count = 0;
int sum = 0;
while (right < n) {
sum += nums[right];
while (sum >= x) {
if (sum >= x) {
count += n - right;
}
sum -= nums[left];
left += 1;
}
right += 1;
}
System.out.println(count);
}











网友评论