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;
    }
}
相关推荐
codists1 小时前
《算法导论(第4版)》阅读笔记:p86-p90
算法
ShineSpark1 小时前
C++面试3——const关键字的核心概念、典型场景和易错陷阱
c++·算法·面试
菠萝崽.1 小时前
RabbitMQ高级篇-MQ的可靠性
java·分布式·后端·消息队列·rabbitmq·异步编程
万叶学编程3 小时前
@RequestParam 和 @RequestBody、HttpServletrequest 与HttpServletResponse
java
zfj3213 小时前
H2数据库源码学习+debug, 数据库 sql、数据库引擎、数据库存储从此不再神秘
java·数据库·sql·学习·数据库底层原理
编程、小哥哥4 小时前
Java面试实战:从Spring Boot到分布式缓存的深度探索
java·spring boot·redis·微服务·grpc·缓存技术·面试技巧
在未来等你4 小时前
互联网大厂Java求职面试:Spring AI与大模型交互的高级模式与自定义开发
java·微服务·云原生·大模型·spring ai
智驱力人工智能4 小时前
AI移动监测:仓储环境安全的“全天候守护者”
人工智能·算法·安全·边缘计算·行为识别·移动监测·动物检测
androidwork4 小时前
Android Kotlin权限管理最佳实践
android·java·kotlin
sakoba4 小时前
Tomcat简述介绍
java·tomcat