Title

求arr所有子数组中累加和为k的最长子数组长度


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
        int sum=0;
        map<int,int>m;
        m[0] = -1;
        int n = arr.size();
        int maxLen=INT_MIN;
        for(int i=0;i<n;++i) {
            sum += arr[i];
            if (!m.count(sum)) {
                //第一次出现的位置
                m[sum] = i;
//                 maxLen = max(maxLen, i-m[sum-k]); 
            }
            //0-j = sum-k ,那么 k = j+1 ~i
            if (m.count(sum-k) && i-m[sum-k] > maxLen)
                //
                maxLen = i-m[sum-k];
        }
        return maxLen;
    }
};
posted @ 2020-11-30 23:22  .geek  阅读(161)  评论(0编辑  收藏  举报