LeetCode热题100-560. 和为 K 的子数组

560. 和为 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 <= nums[i] <= 1000
  • -107 <= k <= 107

思路1:依旧暴力

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        int n=nums.length,ans=0,sum=0;
        for(int i=0;i<n;i++){
            sum=nums[i];
            for(int j=i+1;j<n;j++){
                if(sum==k) ans++;
                sum+=nums[j];
            }
            if(sum==k) ans++;
        }
       
        return ans;
    }
}

思路2:前缀和

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        int n=nums.length,res=0;
        int[]pre = new int[n+1];//前缀和数组
        for(int i=0;i<n;i++){
            pre[i+1]=nums[i]+pre[i];
        } 
        Map<Integer,Integer> map = new HashMap<>();
        for(int t : pre){
            int s=t-k;
            if(map.containsKey(s)){
                res+=map.get(s);
            }
            map.put(t,map.getOrDefault(t,0)+1);
        }
        return res;
    }
}
相关推荐
8Qi84 小时前
回文子串(Palindromic Substrings)—— 题解
算法·leetcode·职场和发展·动态规划
二月夜6 小时前
剖析Java正则表达式回溯问题
java·正则表达式
xuhaoyu_cpp_java7 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
程序员二叉7 小时前
【Java】集合面试全套精讲|HashMap/ArrayList高频考点完整版
java·面试·哈希算法
cfm_29148 小时前
JVM GC垃圾回收初步了解
java·开发语言·jvm
心之伊始8 小时前
LangChain4j RAG 实战:Java 后端如何把本地文档接入 Embedding 检索链路
java·架构·源码分析·csdn
许彰午8 小时前
17_synchronized关键字深度解析
java·开发语言
小宋加油啊9 小时前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
lqqjuly9 小时前
前沿算法深度解析(一)
算法