LeetCode热题100 和为 K 的子数组

题目描述

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

子数组是数组中元素的连续非空序列。

示例 1:

输入: nums = 1,1,1, k = 2
输出: 2

示例 2:

输入: nums = 1,2,3, k = 3
输出: 2

提示:

1<=nums.length<=2∗1041 <= nums.length <= 2 * 10^41<=nums.length<=2∗104

-1000 <= numsi <= 1000
−107<=k<=107-10^7 <= k <= 10^7−107<=k<=107

思路

1 求出前缀和。

2 一段和为k的子数组,将首部标记为i,尾部标记为j,那么prej = prei-1 + k。

3 因此每次利用哈希表记录prei的个数,答案加上 prej - k 的个数即可。

代码

cpp 复制代码
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
    	int n = nums.size();
        vector<int>pre(n + 1, 0);
        /* 
		pre[j] = pre[i] + k
		pre[i] = pre[j] - k
        */
        unordered_map<int, int> ump;
        int ans = 0;
        ump[0] = 1;
        for(int j = 1; j <= n; ++j)
        {
        	pre[j] = pre[j - 1] + nums[j - 1];
        	ans += ump[pre[j] - k];
        	++ump[pre[j]];
        }
		return ans;
    }
};
相关推荐
鱼鱼不愚与2 小时前
《原来如此 | 第01期:为什么导航软件能预测红绿灯倒计时?》
算法
复杂网络7 小时前
论最小 Agent 计算机的形态
算法
kisshyshy1 天前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
猿人谷1 天前
不只是 CPU 阈值:STAR 如何用 GAT + Transformer 做容器级自动扩缩容?
人工智能·算法
复杂网络1 天前
Stable Diffusion 视觉大模型微调技术深度调研
算法
复杂网络1 天前
基于 Stable Diffusion 架构的视觉大模型代表性工作与原理深度解析
算法
MrZhao4001 天前
Agent Loop 如何用 Hook 扩展:权限、日志与工具拦截
算法
MrZhao4001 天前
Agent 为什么需要 Skills:别把所有知识都塞进 system prompt
算法
JieE2123 天前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2124 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试