classSolution{intsubarraySum(int[] nums,int k){int n = nums.length;int[] preSum =newint[n +1];
preSum[0]=0;for(int i =0; i < n; i++){
preSum[i +1]= preSum[i]+ nums[i];}int res =0;for(int i =1; i <= n; i++){for(int j =0; j < i; j++){if(preSum[i]- preSum[j]== k){
res++;}}}return res;}}
解法二:前缀和+HashMap
classSolution{intsubarraySum(int[] nums,int k){HashMap<Integer,Integer> preSum =newHashMap<>();
preSum.put(0,1);int res =0, curSum =0;for(int num : nums){
curSum += num;int diff = curSum - k;if(preSum.containsKey(diff)){
res += preSum.get(diff);}
preSum.put(curSum, preSum.getOrDefault(curSum,0)+1);}return res;}}
题目题目及示例我的题解解法一:前缀和+暴力遍历class Solution { int subarraySum(int[] nums, int k) { int n = nums.length; int[] preSum = new int[n + 1]; preSum[0] = 0; for (int i = 0; i < n; i++) { preSum[i + 1] = preSum[i] +