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;
    }
}
相关推荐
csdn_aspnet1 天前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法
Dicky-_-zhang1 天前
消息队列Kafka/RocketMQ选型与高可用架构:从单体到100万TPS的演进
java·jvm
晨曦中的暮雨1 天前
4.15腾讯 CSIG云服务产线 一面
java·开发语言
fake_ss1981 天前
AI时代学习全栈项目开发的新范式
java·人工智能·学习·架构·个人开发·学习方法
谙弆悕博士1 天前
【附C源码】从零实现C语言堆数据结构:原理、实现与应用
c语言·数据结构·算法··数据结构与算法
茉莉玫瑰花茶1 天前
工作流的常见模式 [ 1 ]
java·服务器·前端
未若君雅裁1 天前
Spring AOP、日志切面与声明式事务原理
java·后端·spring
No8g攻城狮1 天前
【人大金仓】wsl2+ubuntu22.04安装人大金仓数据库V9
java·数据库·spring boot·非关系型数据库
xiaoerbuyu12331 天前
开源Java 邮箱 基于SpringBoot+Vue前后端分离的电子邮件
java·开发语言