Leetcode 560. 和为 K 的子数组 JavaScript (Day 5)

javascript 复制代码
var subarraySum = function(nums, k) {
    let count = 0,sum=0;
    let idx=new Map();
    for(let x of nums){
        idx.set(sum,(idx.get(sum)??0)+1);
        sum+=x;
        let j=sum-k;
        count+=idx.get(j)??0;
    }
    
    return count;

}

核心思想:前缀和+两数之和

前缀和
s0=0, si=nums0+nums1+⋯+numsi−1
注意 s 是一个长为 n+1 的数组,第一项一定是 0。最后一项的下标是 n。
设 i<j,如果 numsi 到 numsj−1 的元素和等于 k,用前缀和表示,就是
sj−si=k(两数之和等于k)

将所有的前缀和放入哈希表中,边放入边计算,就变成和两数之和一样的思想了

算法注意点:注意当我们拿到右边一个数时,需要先找左边有没有符合要求的数,再把这个数放入哈希表(给出的代码在下一次循环的开始放入哈希表,这样可以避免单独设置(0,1)),一定不能先把这个数放入哈希表后,在来找左边有没有符合要求的数

相关推荐
星马梦缘15 小时前
算法设计与分析 作业三 纯答案
算法
智码看视界15 小时前
老梁聊全栈:JavaScript 原型链深入探索对象继承的奥秘
前端·javascript·ecmascript
智码看视界15 小时前
老梁聊全栈系列 JavaScript语言本质:从原型链到异步编程的深度解析
开发语言·javascript·全栈·javascript核心
不知名的老吴15 小时前
经典算法题之行星碰撞
数据结构·算法
西安邮电大学15 小时前
有关数组的经典算法题
java·后端·其他·算法·面试
学Linux的语莫16 小时前
大模型微调数据集格式详解:Alpaca、ShareGPT、DPO、KTO、预训练数据怎么构建?
人工智能·算法·机器学习·微调格式
wayz1116 小时前
Momentum:UO(终极震荡指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
Boom_Shu16 小时前
浅拷贝与深拷贝
开发语言·c++·算法
触底反弹16 小时前
一文彻底搞懂 JavaScript 栈和队列(建议收藏)
javascript·算法·面试
WL学习笔记16 小时前
通讯录(顺序表实现)
c语言·数据结构·算法