【leetcode100】和为k的子数组(两种解法)

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

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

示例 1:

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

输出:2

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        int ans=0;
        for (int l = 0; l < nums.length; l++) {
            
            int sum=0;
            for (int r = l; r<nums.length; r++) {
                sum+=nums[i];
                if (sum==k){
                    ans++;
                }
            }

        }

        return ans;
    }
}

这个题还可以进行优化,我们可以使用前缀和。我们可以使用pre前缀和。我们只需要判断前缀和里是否存在 k-pre就可以了

java 复制代码
import java.util.HashMap;

class Solution {
    public int subarraySum(int[] nums, int k) {
        int count=0,pre=0;
        //定义前缀和
        HashMap<Integer, Integer> mp = new HashMap<>();//key存放前缀和,count记录前缀和出现的次数
        mp.put(pre,1);
        for (int i = 0; i < nums.length; i++) {
            pre+=nums[i];//计算当前前缀和
            if (mp.containsKey(k-pre)){
                count+=mp.get(k-pre);//获取k-pre的前缀和出现的次数
            }
            mp.put(pre,mp.getOrDefault(pre, 0) + 1);//将该前缀出现的次数+1并放入map中
            
        }
        return count;
    }
}
相关推荐
二哈赛车手5 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
吃好睡好便好6 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
栗子~~6 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
YDS8296 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
仰泳之鹅6 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
未若君雅裁7 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手8 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
阿维的博客日记8 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI8 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
x_yeyue8 小时前
三角形数
笔记·算法·数论·组合数学