力扣 前缀和

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

前缀和大致理解为到达某个位置,前面几个数的总和,即s[i+1]=s[i]+a[i+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;
    }
}
相关推荐
yaoxin5211231 分钟前
273. Java Stream API - Stream 中的中间操作:Mapping 操作详解
java·开发语言·python
patrickpdx3 分钟前
leetcode:环形链表
算法·leetcode·链表
一念一花一世界5 分钟前
Arbess从基础到实践(25) - 集成GitLab+阿里云OSS实现Java项目自动化构建并将制品上传Aliyun OSS
java·阿里云·gitlab·cicd·arbess
资深web全栈开发5 分钟前
LeetCode 3652: 按策略买卖股票的最佳时机
算法·leetcode·职场和发展
liyi_hz20086 分钟前
企业信创落地深水区:O2OA(翱途)平台的国产化适配实践与技术思考
java·开源软件
她说..9 分钟前
手机验证码功能实现(附带源码)
java·开发语言·spring boot·spring·java-ee·springboot
Adellle12 分钟前
Java-Stream流
java
Wang ruoxi15 分钟前
基于最小二乘法的离散数据拟合
人工智能·算法·机器学习
Xの哲學19 分钟前
Linux链路聚合深度解析: 从概念到内核实现
linux·服务器·算法·架构·边缘计算
xUxIAOrUIII21 分钟前
JWT和拦截器使用【附Maven中操作步骤】
java·maven