560. Subarray Sum Equals K

560. Subarray Sum Equals K

Description

Difficulty: Medium

Related Topics: Array, Hash Table, Prefix Sum

Given an array of integers nums and an integer k, return the total number of subarrays whose sum equals to k.

A subarray is a contiguous non-empty sequence of elements within an array.

Example 1:

1
2
Input: nums = [1,1,1], k = 2
Output: 2

Example 2:

1
2
Input: nums = [1,2,3], k = 3
Output: 2

Constraints:

  • 1 <= nums.length <= 2 * 104
  • -1000 <= nums[i] <= 1000
  • -107 <= k <= 107

Hints/Notes

Solution

Language: C++

One pass:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
unordered_map<long, int> m;
m[0] = 1;
int res = 0, sum = 0;
for (int i = 0; i < nums.size(); i++) {
sum += nums[i];
if (m.contains(sum - k)) {
res += m[sum - k];
}
m[sum]++;
}
return res;
}
};

Two pass:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        int size = nums.size();
        vector<intpreSum(size + 10);
        for (int i = 0; i < size; i++) {
            preSum[i + 1] = preSum[i] + nums[i];
        }
        map<intint> m;
        int res = 0;
        for (int i = 0; i <= size; i++) {
            int val = preSum[i];
            if (m.count(val - k)) {
                res += m[val - k];
            }
            m[val]++;
        }
        return res;
    }
};