LeetCode 560. Subarray Sum Equals K

LeetCode 560. Subarray Sum Equals K (和为 K 的子数组)

题目

链接

https://leetcode-cn.com/problems/subarray-sum-equals-k/

问题描述

给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。

示例

输入:nums = [1,1,1], k = 2
输出:2

提示

1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107

思路

与304类似,也是前缀和思路,把每个数的前缀和存起来。同时也要计算前面有没有符合差值为k的区间,考虑到值有正负,这里采用hashmap存放,分别为前缀和值,和该值的数量,遍历结束即可得到答案。

需要注意的有,最开始时要把数对<0,1>加入,用于处理包含开头的数。

复杂度分析

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

代码

Java

    public int subarraySum(int[] nums, int k) {
        int ans = 0;
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(0,1);
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            int need = sum - k;
            if (map.containsKey(need)) {
                ans += map.get(need);
            }
            map.put(sum, map.getOrDefault(sum, 0) + 1);
        }

        return ans;
    }
posted @   cheng102e  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2020-03-05 剑指 Offer 18. 删除链表的节点
2020-03-05 剑指 Offer 20. 表示数值的字符串
2020-03-05 面试题19. 正则表达式匹配
2020-03-05 剑指 Offer 66. 构建乘积数组
2020-03-05 剑指 Offer 03. 数组中重复的数字
2020-03-05 剑指 Offer 67. 把字符串转换成整数
2020-03-05 剑指 Offer 65. 不用加减乘除做加法
点击右上角即可分享
微信分享提示