美文网首页程序员
力扣 560 和为K的子数组

力扣 560 和为K的子数组

作者: zhaojinhui | 来源:发表于2020-11-07 02:00 被阅读0次

    题意:给定一个数组,找出所有和为k的子数组的个数

    思路:

    1. 遍历数组,用hashmap记录所有之前出现过的值的和,以及它们出现的个数
    2. 每次查看map中是否有sum-k的key,如果有把它对应的出现个数加入结果
    3. 把<0,1>放入hashmap中,用来计算sum==k本身的情况

    思想:hashmap

    复杂度:时间O(n),空间O(n)

    class Solution {
        public int subarraySum(int[] nums, int k) {
            HashMap<Integer, Integer> map = new HashMap();
            int sum = 0;
            map.put(0, 1);
            int res = 0;
            for(int i=0;i<nums.length;i++) {
                sum += nums[i];
                res += map.getOrDefault(sum - k, 0);
                map.put(sum, map.getOrDefault(sum, 0) + 1);
            }
            return res;
        }
    }
    

    相关文章

      网友评论

        本文标题:力扣 560 和为K的子数组

        本文链接:https://www.haomeiwen.com/subject/acvovktx.html