class Solution {
public:
int numSubarraysWithSum(vector<int>& nums, int goal) {
unordered_map<int, int> d;
d[0] = 1;
int ans = 0;
int cur_sum = 0;
for (int i = 0; i < nums.size(); i++) {
cur_sum += nums[i];
ans += d[cur_sum - goal];
d[cur_sum] += 1;
}
return ans;
}
};