和为K的连续子数组
2021-01-20 本文已影响0人
windUtterance
题目描述:
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
示例:
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
作者:labuladong
链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/solution/qian-zhui-he-ji-qiao-xiang-jie-by-labuladong/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Java代码:
class Solution {
public int subarraySum(int[] nums, int k) {
int n = nums.length;
Map<Integer, Integer> preSum = new HashMap<>();
preSum.put(0, 1);
int ans = 0, sum0_i = 0;
for(int i = 0;i < n;i++) {
sum0_i += nums[i];
int sum0_j = sum0_i - k;
if(preSum.containsKey(sum0_j))
ans += preSum.get(sum0_j);
preSum.put(sum0_i, preSum.getOrDefault(sum0_i, 0) + 1);
}
return ans;
}
}