public int subarraySum(int[] nums, int k) {
int sum = 0;
int start=0;
int count = 0;
for(int i = 0;i < nums.length ; i++){
start=i;
sum=0;
while(start<nums.length){
sum+=nums[start++];
if(sum==k)count++;
}
}
return count;
}
HashMap的解法
先建立sum[] 的数组
建立hashmap,key为sum[i],value为次数
统计后一个数减去前一个数等于k的个数
public int subarraySumEqualsK(int[] nums, int k) {
int count = 0, sum = 0;
Map<Integer, Integer> map = new HashMap<>();
map.put(0, 1);//和为0的有一次
//eg:输入 [1] 1
// 输出 1
// map: 0->1 1-> sum[0]-k=0, map[0]为1,结果为1
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
if (map.containsKey(sum - k)) {
count = count + map.get(sum - k);
}
if (map.containsKey(sum)) {
map.put(sum, map.get(sum) + 1);
} else {
map.put(sum, 1);
}
}
return count;
}
暴力解法两层循环,外层循环遍历数组中的每一个数,以每一个数当做子数组的开始位置;内层循环遍历得到是否存在和为K的子数组 public int subarraySum(int[] nums, int k) { int sum = 0; int start=0; int count = 0; for(int i = 0;i &lt;...