题目描述
-
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
-
示例 1 :
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 -
说明 :
数组的长度为 [1, 20,000]。
数组中元素的范围是 [-1000, 1000]
整数 k 的范围是 [-1e7, 1e7]。
解析
- 记录数组每个位置上的数,与之前所有数的和,扫描次数组若(两项的差额==K)则计数+1
代码
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n = scanner.nextInt();
int[] a=new int[n];
for (int i = 0; i < n; i++) {
a[i]=scanner.nextInt();
}
int k=scanner.nextInt();
int solve = solve(a,k);
System.out.println(solve);
}
private static int solve(int[] a, int k) {
int count=0;
int[] sums=new int[a.length+1];//用于记录0-i的和
sums[0]=0;
for (int i = 0; i < a.length; i++) {
sums[i+1]=sums[i]+a[i];//第0-为的和
}
for (int i = sums.length-1; i >=0; i--) {
for (int j = 0; j < i; j++) {
if(sums[i]-sums[j]==k) {
count++;
}
}
}
return count;
}