好點得手機網(wǎng)站托管一套完整的運營方案
560. 和為K的子數(shù)組
給你一個整數(shù)數(shù)組 nums 和一個整數(shù) k ,請你統(tǒng)計并返回 該數(shù)組中和為 k 的子數(shù)組的個數(shù) 。
子數(shù)組是數(shù)組中元素的連續(xù)非空序列。
示例:
輸入:nums = [1,1,1], k = 2
輸出:2
法一:暴力法
var subarraySum = function(nums, k) {let res = 0;for(let i=0;i<nums.length;i++){let sum = 0;for(let j = i;j>=0;j--){sum+=nums[j];if(sum===k){res++;}}}return res;
};
法二:前綴和+哈希表
- 使用前綴和存儲累計值,利用 currentSum - k 快速找到滿足條件的子數(shù)組。
function subarraySum(nums, k) {// 初始化前綴和計數(shù)器const prefixSumCount = new Map();prefixSumCount.set(0, 1); // 初始前綴和為0,出現(xiàn)次數(shù)為1let currentSum = 0;let result = 0;for (const num of nums) {// 更新當前前綴和currentSum += num;// 檢查是否存在滿足條件的前綴和if (prefixSumCount.has(currentSum - k)) {result += prefixSumCount.get(currentSum - k);}// 更新前綴和計數(shù)器prefixSumCount.set(currentSum,(prefixSumCount.get(currentSum) || 0) + 1);}return result;
}