leetcode——和为K的子数组(java)

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

子数组是数组中元素的连续非空序列。

示例 1:

复制代码
输入:nums = [1,1,1], k = 2
输出:2

示例 2:

复制代码
输入:nums = [1,2,3], k = 3
输出:2

解题方法:(哈希表+前缀和)

1.经过分析此题可以用哈希表与前缀和的方法进行解题,首先其涉及到与k的差值的问题,可以用哈希表来记录。

2.其次由于其是子数组的和,所以我们可以使用前缀和来进行记录。

3.创建哈希表之后,我们需要提前将(0, 1)添加进去,因为当我们的差值为0时,说明当前的元素可以组成长度为1的子数组。

4.开始遍历数组,并且当我们的差值在哈希表中出现时,将其值加入到结果中,最后别忘了更新键值对。

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        int n = nums.length;
        int ans = 0, sum = 0;
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(0, 1);
        for (int i = 0; i < n; i++) {
            sum += nums[i];
            if (map.containsKey(sum - k)) {
                ans += map.get(sum - k);
            }
            map.put(sum, map.getOrDefault(sum, 0) + 1);
        }
        return ans;
    }
}
相关推荐
X journey2 分钟前
机器学习实践(18.5):特征工程补充
人工智能·算法·机器学习
糯米团子7496 分钟前
蓝桥杯javaB组赛前四天复习-1
java·windows·蓝桥杯
莫逸风11 分钟前
【java-core-collections】集合框架深度解析
java·开发语言
小江的记录本13 分钟前
【分布式】分布式系统核心知识体系:CAP定理、BASE理论与核心挑战
java·前端·网络·分布式·后端·python·安全
LG.YDX16 分钟前
笔试训练48天:mari和shiny(动态规划 - 线性dp)
数据结构·算法
m0_5648768416 分钟前
提示词应用
深度学习·学习·算法
qq_2837200518 分钟前
Transformer 高频面试题及答案
算法·面试·transformer
ch.ju19 分钟前
Java程序设计(第3版)第二章——switch case break
java
承渊政道19 分钟前
【递归、搜索与回溯算法】(floodfill算法:从不会做矩阵题,到真正掌握搜索扩散思想)
数据结构·c++·算法·leetcode·矩阵·dfs·bfs
曹牧19 分钟前
Spring MVC中使用HttpServletRequest和HttpServletResponse
java·spring·mvc