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;
    }
}
相关推荐
追随者永远是胜利者30 分钟前
(LeetCode-Hot100)253. 会议室 II
java·算法·leetcode·go
Jason_Honey21 小时前
【平安Agent算法岗面试-二面】
人工智能·算法·面试
程序员酥皮蛋1 小时前
hot 100 第三十五题 35.二叉树的中序遍历
数据结构·算法·leetcode
追随者永远是胜利者1 小时前
(LeetCode-Hot100)207. 课程表
java·算法·leetcode·go
仰泳的熊猫2 小时前
题目1535:蓝桥杯算法提高VIP-最小乘积(提高型)
数据结构·c++·算法·蓝桥杯
那起舞的日子3 小时前
动态规划-Dynamic Programing-DP
算法·动态规划
yanghuashuiyue3 小时前
lambda+sealed+record
java·开发语言
闻缺陷则喜何志丹3 小时前
【前后缀分解】P9255 [PA 2022] Podwyżki|普及+
数据结构·c++·算法·前后缀分解
每天吃饭的羊3 小时前
时间复杂度
数据结构·算法·排序算法
盟接之桥3 小时前
盟接之桥EDI软件:API数据采集模块深度解析,打造企业数据协同新引擎
java·运维·服务器·网络·数据库·人工智能·制造