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) {
int len = arr.size();
map<int, int>mp;
int sum = 0;
int ret = 0;
// 为了防止漏掉0,应该从-1位置开始累加,将(0,-1)加入map,这样便不会漏掉0了。
mp[0] = -1;
for (int i = 0; i < len; i++) {
sum += arr[i];
// 在mp中寻找sumi
if (mp.find(sum) == mp.end()) {
mp[sum] = i;
}
if (mp.find(sum - k) != mp.end()) {
ret = max(ret, i - mp[sum - k]);
}
}
return ret;
// write code here
}
};