【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;
    }
}
相关推荐
码完就睡4 小时前
数据结构——树、二叉树基础概念
数据结构·算法
豆沙沙包?4 小时前
C++-程序的内存模型(P84-P88)
java·jvm·c++
吴声子夜歌5 小时前
正则指引——匹配原理
java·正则表达式
VL——MOESR5 小时前
【LuoguP1967】货车运输【生成树】【倍增】
c++·算法·题解·倍增·生成树
手写码匠5 小时前
华为云Flexus+DeepSeek征文|Agent 记忆系统实战:用 DeepSeek-R1/V3 + Dify 会话变量打造跨会话长期记忆
人工智能·深度学习·算法·aigc
Olafur_zbj5 小时前
【AI】CUDA编程中的维度
人工智能·算法
未秃头的程序猿5 小时前
凌晨3点被叫醒:线上OOM,我用这套流程40分钟定位根因
java·jvm·后端
letisgo55 小时前
JDK21 + Spring AI 2.0 入场指南:2026 年 Java 开发者 AI 架构全景图
java·ai·idea·jdk21
白仑色6 小时前
Spring Boot 从切面统一控制事务
java·spring boot·aop·spring事务
Flynt6 小时前
Java并行流,让我debug了一整天
java