企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 和为K的子数组 https://leetcode-cn.com/problems/subarray-sum-equals-k/ 给你一个整数数组`nums`和一个整数 `k`,请你统计并返回该数组中和为 `k`的连续子数组的个数 * 时间复杂度:O(N^2),这里NN 是数组的长度; * 空间复杂度:O(1)。 ``` const subarraySum = (nums, k) => { let count = 0; for (let i = 0; i < nums.length; i++) { let sum = 0; for (let j = i; j < nums.length; j++) { sum += nums[j]; if (sum == k) count++; } } return count; }; ``` ![](https://img.kancloud.cn/96/1f/961f9dea6583cde4c8dda58a45ffd19d_870x480.png) prefixSum[j]−prefixSum[i−1]==k 不用求出 prefixSum 数组 * 不关心具体是哪两项的前缀和之差等于k,只关心等于 k 的前缀和之差出现的次数c,就知道了有c个子数组求和等于k * 时间复杂度 O(n) 。空间复杂度 O(n) **注意边界问题---初始化--map = { 0: 1 }** ``` const subarraySum = (nums, k) => { const map = { 0: 1 }; let prefixSum = 0; let count = 0; for (let i = 0; i < nums.length; i++) { prefixSum += nums[i]; if (map[prefixSum - k]) { count += map[prefixSum - k]; } if (map[prefixSum]) { map[prefixSum]++; } else { map[prefixSum] = 1; } } return count; }; ```