class Solution {
public int maxSubArrayLen(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
int[] prefixSum = new int[nums.length + 1];
for (int i = 0; i < nums.length; ++i) {
prefixSum[i + 1] = prefixSum[i] + nums[i];
}
int ret = 0;
for (int i = 0; i < prefixSum.length; ++i) {
if (map.containsKey(prefixSum[i] - k)) {
ret = Math.max(ret, i - map.get(prefixSum[i] - k));
}
if (! map.containsKey(prefixSum[i])) {
map.put(prefixSum[i], i);
}
}
return ret;
}
}