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) {
        // write code here
        unordered_map<int, int> rec;
        rec[0] = -1;
        int cur_num = 0, res = 0;
        
        for(int i=0; i<arr.size(); i++){
            cur_num = cur_num + arr[i];
            if(rec.find(cur_num - k) != rec.end()){
                res = max(res, i - rec[cur_num-k]);
            }
            if(rec.find(cur_num) == rec.end()){
                rec[cur_num] = i;
            }
        }

        return res;
    }
};