相关标签
一、题目要求
二、题解和代码实现
1.题解
2.代码实现
代码如下(示例):
//前缀和+map
class Solution {
public int subarraySum(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<>();//用于记录key为前缀和,val为前缀和出现的次数
int count = 0;//计数
int sum = 0;//前缀和
for (int i = 0; i < nums.length; i++) {
sum+=nums[i];//累加前缀和
if (sum==k){//从下标 0 累加到 i 刚好等于 k
count++;///计数+1
}
if (map.containsKey(sum-k)){
//差值是否存在,说明找到了在当前下标i 左边的数组中有满足 ==k的子数组,子数组的个数就是map.get(sum-k)的val值
count+=map.get(sum-k);//到了这里差值肯定存在,存在Value个值,那么count+Value
}
map.put(sum,map.getOrDefault(sum,0)+1);
}
return count;
}
}
//暴力解法
class Solution {
public int subarraySum(int[] nums, int k) {
int len = nums.length;
if (len==1 &&nums[0]==k){
return 1;
}
int count=0;
for (int i = 0; i < len; i++) {
int sum = 0;
for (int j = i; j <len; j++) {
sum+=nums[j];
if (sum==k){
count++;
}
}
}
return count;
}
}