力扣 前缀和

找子数组的个数了解前缀和的基础。

前缀和大致理解为到达某个位置,前面几个数的总和,即si+1=si+ai+1,可以通过一次循环获得。然后几个前缀和作差,即可得到某个位置到某个位置的和,根据map的键值对进行更新次数。

题目

java 复制代码
class Solution {
   public static int subarraySum(int[] nums, int k) {
        int count = 0;
        int sum = 0;
        Map<Integer, Integer> map = new HashMap<>();
        map.put(0, 1); // 初始化前缀和为0的次数为1

        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];//计算前缀和
         //sum-k满足条件从某个位置到当前位置的连续子数组的和为k
         //sum[j]-sum[i]=k,k即i+1到j的元素之和
            if (map.containsKey(sum - k)) {
                //对应的次数累加
                count += map.get(sum - k);
            }
            //更新sum在map出现的次数,出现过就在原来的次数递增,没出现过初始化为1
            map.put(sum, map.getOrDefault(sum, 0) + 1);
        }

        return count;
    }
}
java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        int count = 0;
       //双指针
        for (int i = 0; i < nums.length; i++) {
            int sum = 0;//每到一个数就重置sum
            for (int j = i; j >= 0; j--) {
                sum += nums[j];//从当前的数开始往回进行累加,找组合数的和
                if (sum == k) {
                    count++;
                }
            }
        }
        return count;
    }
}
相关推荐
SL_staff19 分钟前
BI大屏嵌入MES的登录态难题:JVS统一账号体系实战解法
java·数据分析·数据可视化
qq_4523962322 分钟前
第四篇:《索引原理与实战:B-tree、Hash、GIN、GiST、BRIN》
算法·哈希算法·gin
乌暮28 分钟前
综合案例:宠物电商系统
java·开发语言·spring·mvc·restful·1024程序员节
VimorphTech36 分钟前
一段字幕太长,怎样拆句并安排显示时间?
java·spring boot
万联WANFLOW36 分钟前
Kimi K3.1 Pro 接口接入指南:模型选型、费用计算与零数据保留
java·spring boot·python·安全·spring·大模型
西索斯coding38 分钟前
Qwen3-Max 与 Qwen-Plus:60 个真实修复任务评测方案
大数据·网络·算法·ai
织码weavecodes1 小时前
新闻资讯模块设计:内容发布、阅读计数与附件鉴权
java·服务器·数据库
学到老活到老1 小时前
Spring 事务怎样生效?为什么加了 @Transactional 仍不回滚?
java·spring
学到老活到老1 小时前
Spring 怎样创建 Bean?@Autowired 在哪一步生效?
java·spring
用户112936112191 小时前
我扫了项目里 739 个 Controller,发现最危险的越权漏洞不是没认证
java