2024年4月25日
暴力想法就是枚举子数组的左右端点,但是这样会造成大量重复,不妨用哈希表记录左端点的前缀和,再枚举右端点,ans += 符合条件的左端点数目
func numSubarraysWithSum(nums []int, goal int) int {
st, ans, s := make(map[int]int), 0, make([]int, len(nums)+1)
st[0]++
for i := 1; i <= len(nums); i++ {
s[i] = s[i-1] + nums[i-1]
ans += st[s[i]-goal]
st[s[i]]++
}
return ans
}