Google
560 Subarray Sum Equals K

1. Question

Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.
Example 1:
1
Input: nums = [1,1,1], k = 2
2
3
Output: 2
Copied!
Note:
  1. 1.
    The length of the array is in range [1, 20,000].
  2. 2.
    The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].

2. Implementation

(1) HashTable
1
class Solution {
2
public int subarraySum(int[] nums, int k) {
3
Map<Integer, Integer> map = new HashMap<>();
4
map.put(0, 1);
5
int sum = 0;
6
int res = 0;
7
8
for (int num : nums) {
9
sum += num;
10
if (map.containsKey(sum - k)) {
11
res += map.get(sum - k);
12
}
13
map.put(sum, map.getOrDefault(sum, 0) + 1);
14
}
15
return res;
16
}
17
}
Copied!

3. Time & Space Complexity

时间复杂度O(n), 空间复杂度O(n)