题解 | #和为K的连续子数组#

和为K的连续子数组

https://www.nowcoder.com/practice/704c8388a82e42e58b7f5751ec943a11

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

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务