560. 和为 K 的子数组
和为 K 的子数组
题目描述:
给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。
示例 1:
输入:nums = [1,1,1], k = 2
输出:2
示例 2:
输入:nums = [1,2,3], k = 3
输出:2
提示:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107
思路:
Pre[i] = pre[i-1] + nums[i]
可以转化成 pre[i] - k = pre[j],我们要求的就是j是多少,配合map可以以O(n)的复杂度解决
代码:
func subarraySum(nums []int, k int) int {
var m map[int]int
m = make(map[int]int, 0)
m[0] = 1
count, pre := 0,0
for i:=0;i < len(nums); i++{
pre += nums[i]
if _,ok := m[pre-k];ok{
count += m[pre-k]
}
m[pre] += 1
}
return count
}
代码效率:
执行用时:36 ms, 在所有 Go 提交中击败了96.01%的用户
内存消耗:7.5 MB, 在所有 Go 提交中击败了45.67%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!