classSolution { public: intsubarraySum(vector<int>& nums, int k){ unordered_map<int, vector<int>> sum2index; int sum = 0, ans = 0; for (int i = 0; i < nums.size(); i++) { sum += nums[i]; sum2index[sum].push_back(i); } sum = 0; for (int i = 0; i < nums.size(); i++) { if (!sum2index.count(sum + k)) { sum += nums[i]; continue; } vector<int> &indexes = sum2index[sum + k]; int j; for (j = 0; j < indexes.size() && indexes[j] < i; j++); ans += (indexes.size() - j); sum += nums[i]; } return ans; } };