力扣热门100题之和为k的子数组【中等】

题目描述

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

示例 1:

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

输出:2

示例 2:

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

输出:2

提示:

解法1 暴力破解

js 复制代码
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var subarraySum = function(nums, k) {
    let count=0;
    for(let i=0;i<nums.length;i++){
        let sum=0;
        for(let j=i;j>=0;j--){
            sum+=nums[j];
            if(sum==k){
                count++;
            }
        }
    }
    return count;
};

执行情况

解法2 前缀和

js 复制代码
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var subarraySum = function(nums, k) {
    let count=0;
    const pre=[]
    let sum=0;
    for(let i=0;i<nums.length;i++){
        sum+=nums[i];
        pre[i]=sum;
    }
    for(let i=0;i<pre.length;i++){
            if(pre[i]==k)count++;
            for(let j=0;j<i;j++){
                if(pre[i]-pre[j]==k){
                    count++;
                }
            }
        
    }
    return count;
};

执行情况

前缀和+哈希

js 复制代码
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var subarraySum = function(nums, k) {
    let count=0;
    let sum=0;
    const data=new Map()
    data.set(0,1);
    for(let i=0;i<nums.length;i++){
        sum+=nums[i];
        if(data.has(sum-k)){
            count+=data.get(sum-k);
        }
        data.set(sum,data.has(sum)?data.get(sum)+1:1);
    }
    return count;
};

执行情况

相关推荐
Kaltistss25 分钟前
98.验证二叉搜索树
算法·leetcode·职场和发展
知己如祭29 分钟前
图论基础(DFS、BFS、拓扑排序)
算法
mit6.82437 分钟前
[Cyclone] 哈希算法 | SIMD优化哈希计算 | 大数运算 (Int类)
算法·哈希算法
c++bug40 分钟前
动态规划VS记忆化搜索(2)
算法·动态规划
哪 吒42 分钟前
2025B卷 - 华为OD机试七日集训第5期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)
python·算法·华为od·华为od机试·2025b卷
军训猫猫头1 小时前
1.如何对多个控件进行高效的绑定 C#例子 WPF例子
开发语言·算法·c#·.net
success2 小时前
【爆刷力扣-数组】二分查找 及 衍生题型
算法
Orlando cron2 小时前
数据结构入门:链表
数据结构·算法·链表
牛客企业服务3 小时前
2025年AI面试推荐榜单,数字化招聘转型优选
人工智能·python·算法·面试·职场和发展·金融·求职招聘
糖葫芦君4 小时前
Policy Gradient【强化学习的数学原理】
算法