P4009. 和为K的子数组
该题是这个题的简化版链接
题目内容
给你一个整数数组\(nums\)和一个整数\(k\),请你统计并输出 该数组中和为 \(k\) 的子数组的个数。
子数组是数组中元素的连续非空序列。
输入描述
输入共两行。
第一行为两个个整数 n,k。
第二行为\(n\)个整数\(nums_0,nums_1,...,nums_{n-1}\),数字之间以空格分隔。
输出描述
一个整数,表示答案。
样例1
输入
3 2
1 1 1
输出
2
样例2
输入
3 3
1 2 3
输出
2
提示
\(1 <= nums.length <= 2 * 10^4\)
\(-1000 <= nums[i] <= 1000\)
\(-10^7 <= k <= 10^7\)
这个题其实是一个蓝桥杯的改编题:
package hot100.和为K的子数组;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner= new Scanner(System.in);
int n=scanner.nextInt();
int k=scanner.nextInt();
int[] a=new int[n+1];
for(int i=1;i<=n;i++){
a[i]=scanner.nextInt();
}
Map<Integer,Integer> mp=new HashMap();
int sum=0,ans=0;
mp.put(0,1);
for(int i=1;i<=n;i++){
sum=sum+a[i];
if(mp.containsKey(sum-k)) {
ans += mp.get(sum-k);
}
mp.put(sum, mp.getOrDefault(sum,0) + 1);
}
System.out.println(ans);
}
}
//public class Main {
// public static void main(String[] args) {
// Scanner scanner= new Scanner(System.in);
// int n=scanner.nextInt();
// int k=scanner.nextInt();
// int[] a=new int[n+1];
// for(int i=1;i<=n;i++){
// a[i]=scanner.nextInt();
// }
// Map<Integer,Integer> mp=new HashMap();
// int sum=0,ans=0;
// for(int i=1;i<=n;i++){
// sum=(sum+a[i])%k;
// if(mp.containsKey(sum)){
// int tmp=mp.get(sum);
// ans+=tmp;
// mp.put(sum,tmp+1);
// }
// else{
// if(sum==0) ans++;
// mp.put(sum,1);
// }
// }
// System.out.println(ans);
// }
//}
/*
3 2
1 1 1
输出
2
3 3
1 2 3
输出
2
*/