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
    }
};