题目地址:链接
题目描述: 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
示例输出:
输入:nums = [1,1,1], k = 2
输出:2
前缀和+哈希表
思路: 使用哈希表记录前缀和的次数(需要额外加上一个0,即什么都不选)。每次获取另外一个前缀和sum - k是否存在,sum - k == 0 。
var subarraySum = function(nums, k) {
let n = nums.length;
let ans = 0;
let hash_map = {0: 1};
let sum = 0;
for(let i = 0; i < n; i ++) {
sum += nums[i];
let key = sum - k;
if(key in hash_map) ans += hash_map[key] // 记录当前数组和为k的个数
if(sum in hash_map) hash_map[sum] ++; // 记录当前和为sum的个数
else hash_map[sum] = 1;
}
return ans;
};
8万+

被折叠的 条评论
为什么被折叠?



