每日一题-Day08-数组累加问题

题目描述

给定一个无序数组arr, 其中元素可正、可负、可0。给定一个整数k,求arr所有子数组中累加和为k的最长子数组长度

示例:

输入:[1,-2,1,1,1],0
输出:3

public static int maxLength(int[] arr, int k) {
    if (arr == null || arr.length == 0) {
        return 0;
    }
    Map<Integer, Integer> map = new HashMap<>();
    map.put(0, -1);
    int len = 0;
    int sum = 0;
    for (int i = 0; i < arr.length; i++) {
        sum += arr[i];
        if (map.containsKey(sum - k)) {
            len = Math.max(len, i - map.get(sum - k));
        }
        if (!map.containsKey(sum)) {
            map.put(sum, i);
        }
    }
    return len;
}

题目来自牛客网

posted @ 2021-02-09 22:42  2月2日  阅读(193)  评论(0)    收藏  举报