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;
    }
}
相关推荐
电院工程师11 分钟前
SIMON64/128算法Verilog流水线实现(附Python实现)
python·嵌入式硬件·算法·密码学
轮到我狗叫了11 分钟前
力扣.84柱状图中最大矩形 力扣.134加油站牛客.abb(hard 动态规划+哈希表)牛客.哈夫曼编码
算法·leetcode·职场和发展
丛雨要玩游戏19 分钟前
字符函数和字符串函数
c语言·开发语言·算法
zhangkaixuan45631 分钟前
Apache Paimon 写入流程
java·大数据·apache·paimon
八个程序员34 分钟前
自定义函数(C++)
开发语言·c++·算法
ad钙奶长高高40 分钟前
【C语言】初始C语言
c语言·开发语言·算法
Java爱好狂.44 分钟前
分布式ID|从源码角度深度解析美团Leaf双Buffer优化方案
java·数据库·分布式·分布式id·es·java面试·java程序员
罗西的思考1 小时前
【Agent】 ACE(Agentic Context Engineering)源码阅读笔记---(3)关键创新
人工智能·算法
胡桃夹夹子1 小时前
存档111111111
java·开发语言
不会编程的小寒1 小时前
C++ 中string的用法
java·开发语言