leetcode-和为k的子数组

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

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

示例 1:

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

输出:2

示例 2:

输入:nums = 1,2,3, k = 3

输出:2

提示:

1 <= nums.length <= 2 * 104

-1000 <= numsi <= 1000

-107 <= k <= 107
思路一 :双层for循环,枚举区间的开始和结束为止,求区间和。区间求和考虑用前缀和预处理一下。
思路二:考虑优化,使用单层for循环,对当前下标之前的值求和pre,放入map中进行计数,统计求和pre的个数。当pre-k存在map中时,结果加上pre-k的个数。

思路一:

c 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        int[] sum = new int[nums.length+1];
        for(int i = 1;i<=nums.length;i++){
            sum[i] = sum[i-1]+nums[i-1];
        }
        int cnt = 0;
        for(int r = 0;r<nums.length;r++){
            for(int l = 0;l<=r;l++){
                if(sum[r+1]-sum[l]==k)cnt++;
            }
        }
        return cnt;
    }
}

思路二:

c 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        int res = 0;
        int pre = 0;
        Map<Integer, Integer> mp = new HashMap<>();
        mp.put(0,1);
        for(int i = 0; i<nums.length; i++){
            pre += nums[i];
            if(mp.containsKey(pre-k)){
                res+=mp.get(pre-k);
            }
            Integer t = mp.getOrDefault(pre,0);
            mp.put(pre,t+1);
        }
        return res;
    }
}
相关推荐
前鼻音太阳熊1 分钟前
【MES系统】MES为什么需要SSE?从设备实时监控谈Spring Boot流式推送设计
java·spring boot·后端
大鱼>3 分钟前
宠物行为识别AI算法详解:从数据采集到模型部署的完整方案
人工智能·深度学习·算法·宠物
Lhappy嘻嘻4 分钟前
网络初识|基础入门:局域网广域网、IP 端口、TCP/IP 五层模型与封装解封装全过程
java·开发语言·网络·笔记·网络协议·tcp/ip
王莎莎-MinerU7 分钟前
解析回归集:RAG 和 Agent 上线前,先把表格、公式、版面测清楚
人工智能·算法·数据挖掘·回归·pdf·ocr
Java面试题总结8 分钟前
区间树:反向映射的前置数据结构
java·前端·数据结构
KaMeidebaby12 分钟前
卡梅德生物技术快报|兔单克隆抗体:噬菌体 Fab 免疫文库搭建实操:兔单克隆抗体重组构建完整参数
前端·网络·数据库·人工智能·算法
AndrewHZ13 分钟前
【LLM技术全景】混合精度与分布式训练:训练大模型的工程奥秘
人工智能·分布式·深度学习·算法·ai·语言模型·llm
尚早立志23 分钟前
六)Spring Boot 源码研读之prepareContext 准备上下文
java·spring boot·后端·spring
AI科技星1 小时前
基于全域数学公理体系求解三元约束极值题【乖乖数学】
人工智能·算法·机器学习·密码学·拓扑学·乖乖数学·全域数学
Lhappy嘻嘻8 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php