题目描述:
给定整数数组和整数k,你需要找到总和等于k的连续子数组的总个数。
输入描述:nums = [1,1,1], k = 2
输出描述:2
说明:1.数组的长度在范围[1, 20000 ]中;
2.数组中的数字范围是[-1000, 1000 ],整数k的范围是[-1E7,1E7]
分析:
如果我们知道sum[0,i-1]和sum[0,j],那么我们就能很轻易得到sum[i,j]的值,这里采用HashMap数据结构保存已经求过和的sum[0,i-1]。
代码:
class Solution {
public int subarraySum(int[] nums, int k) {
int sum=0;
int ans=0;
HashMap<Integer,Integer> map=new HashMap<>();
map.put(0,1);
for(int i=0;i<nums.length;i++){
sum+=nums[i];
if(map.containsKey(sum-k)){
ans+=map.get(sum-k);
}
map.put(sum,map.getOrDefault(sum,0)+1);
}
return ans;
}
}
网友评论