力扣 前缀和

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

前缀和大致理解为到达某个位置,前面几个数的总和,即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;
    }
}
相关推荐
yaoxin52112321 分钟前
434. Java 日期时间 API - Period 基于日期的时间段
java·开发语言·python
noipp1 小时前
推荐题目:洛谷 P10907 [蓝桥杯 2024 国 B] 蚂蚁开会
c语言·c++·算法·编程·洛谷
何极光1 小时前
IDEA集成Maven
java·maven·intellij-idea
程序员二叉2 小时前
【JUC】ThreadLocal底层原理|内存泄漏|弱引用|跨线程传递方案
java·开发语言·面试·职场和发展·juc
程序员二叉2 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
老马识途2.02 小时前
在AI的帮助下理解spring的启动过程
java·前端·spring
青山木2 小时前
Hot 100 --- 轮转数组
java·数据结构·算法
徐小夕2 小时前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
Qt程序员2 小时前
掌握 Linux 内核调度:从原理到实现(进程篇)
java·开发语言
code bean3 小时前
【LangChain】检索器完全指南:从向量检索到生产级 RAG 架构
java·开发语言·微服务