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 <= nums[i] <= 1000
−107<=k<=107-10^7 <= k <= 10^7−107<=k<=107

思路

1 求出前缀和。

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

3 因此每次利用哈希表记录pre[i]的个数,答案加上 pre[j] - 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;
    }
};
相关推荐
源码之家3 小时前
计算机毕业设计:Python棉花产业数据可视化与预测系统 Django框架 ARIMA算法 数据分析 可视化 爬虫 大数据 大模型(建议收藏)✅
人工智能·python·算法·信息可视化·数据挖掘·django·课程设计
py有趣3 小时前
力扣热门100题之最小路径和
算法·leetcode
杨凯凡3 小时前
【016】集合框架总览:List/Set/Map 与线程安全
java·数据结构·list
qeen873 小时前
【算法笔记】前缀和经典题目解析
c语言·c++·笔记·学习·算法
Je1lyfish3 小时前
Haskell 初探
开发语言·笔记·算法·rust·lisp·抽象代数
自我意识的多元宇宙3 小时前
二叉树的遍历和线索二叉树--先序二叉树和后续二叉树
数据结构
im_AMBER3 小时前
Leetcode 159 无重复字符的最长子串 | 长度最小的子数组
javascript·数据结构·学习·算法·leetcode
浮芷.3 小时前
微观搜打撤:基于鸿蒙flutter的内存快照算法的局内外状态隔离与高阶背包系统设计
算法·flutter·华为·开源·harmonyos·鸿蒙
郝学胜-神的一滴3 小时前
[力扣 105]二叉树前中后序遍历精讲:原理、实现与二叉树还原
数据结构·c++·算法·leetcode·职场和发展
sheeta19983 小时前
LeetCode 每日一题笔记 日期:2026.04.20 题目:2078.两栋颜色不同而距离最远的房子
笔记·算法·leetcode