class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* max length of the subarray sum = k
* @param arr int整型vector the array
* @param k int整型 target
* @return int整型
*/
int maxlenEqualK(vector<int>& arr, int k) {
unordered_map<int, int>dic;
vector<int> preSum(arr.size() + 1, 0);
dic[preSum[0]] = 0;
int res = 0;
//前缀和相同的只保存前面的索引值
for (int i = 1; i <= arr.size(); ++i) {
preSum[i] = preSum[i - 1] + arr[i - 1];
if (dic.count(preSum[i] - k)) {
res = max(res, i - dic[preSum[i] - k]);
}
if (dic.count(preSum[i])) {
continue;
} else {
dic[preSum[i]] = i;
}
}
return res;
}
};