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)),一定不能先把这个数放入哈希表后,在来找左边有没有符合要求的数

相关推荐
我命由我1234525 分钟前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
大明者省1 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
抱抱宝1 小时前
Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)
javascript·人工智能·gpt·react.js·prompt·agent
用户938515635072 小时前
Next.js 笔记系统(二):Redis 数据服务与侧边栏组件拆分实战
javascript·全栈
白狐_7983 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander2583 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
Shell运维手记4 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
杨航 AI4 小时前
O(n log n):线性对数原理拆解 这个是排序算法的黄金复杂度之一。
算法·排序算法
船厂电气自动化ai大模型5 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
旖旎夜光5 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口