和相同的二元子数组 先算前缀和 统计每一种前缀和出现的次数 遍历 nums,查询哈希表中元素 sum[j] − goal 的数量,进行累加 123456789101112131415161718192021class Solution { public: int numSubarraysWithSum(vector<int>& nums, int goal) { vector<int> s(nums.size() + 1); int ans = 0; for (int i = 1; i <= nums.size(); i++) { s[i] = s[i - 1] + nums[i - 1]; } // 用哈希表记录每一种前缀和 s[i] 出现的次数 unordered_map<int, int> mp; mp[0] = 1; // s[r] - s[l-1] = goal // s[l-1] = s[r] - goal for (int i = 0; i < nums.size(); i++) { int l = s[i + 1] - goal; ans += mp[l]; mp[r]++; } return ans; }};