力扣热门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;
};

执行情况

相关推荐
AI科技星24 分钟前
质量定义方程常数k = 4π m_p的来源、推导与意义
服务器·数据结构·人工智能·科技·算法·机器学习·生活
摇摆的含羞草42 分钟前
哈希(hash)算法使用特点及常见疑问解答
算法·哈希算法
仰泳的熊猫1 小时前
1077 Kuchiguse
数据结构·c++·算法·pat考试
LYFlied2 小时前
【每日算法】LeetCode 19. 删除链表的倒数第 N 个结点
算法·leetcode·链表
踏浪无痕2 小时前
计算机算钱为什么会算错?怎么解决?
后端·算法·面试
夏乌_Wx2 小时前
练题100天——DAY28:找消失的数字+分发饼干
数据结构·算法
studytosky2 小时前
深度学习理论与实战:反向传播、参数初始化与优化算法全解析
人工智能·python·深度学习·算法·分类·matplotlib
WolfGang0073212 小时前
代码随想录算法训练营Day48 | 108.冗余连接、109.冗余连接II
数据结构·c++·算法
努力学算法的蒟蒻3 小时前
day35(12.16)——leetcode面试经典150
算法·leetcode·面试
cccc来财3 小时前
角点检测算法:Harris 和 FAST 方法
算法·计算机视觉·特征提取