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;
    }
};
相关推荐
Omics Pro8 小时前
之江实验室NAR|虚拟细胞3阶段训练范式
数据库·人工智能·算法·机器学习·自然语言处理
Tisfy8 小时前
LeetCode 0678.有效的括号字符串:O(n)+O(1)一次遍历
算法·leetcode·字符串·题解·贪心·括号匹配
小O的算法实验室8 小时前
IEEE TEVC,学习辅助的搜索路径重构进化算法
学习·算法·重构
Liuchang09118 小时前
洛谷 P2670 [NOIP 2015 普及组] 扫雷游戏
c++·算法·游戏
言乐68 小时前
Python体现逻辑回归和决策树的区别
开发语言·python·算法·决策树·逻辑回归
HugoStudio_SWAN9 小时前
洛谷 B4575 [GESP202609 二级] 直角三角形——临场定义理解与边界质疑
c++·学习·程序人生·算法
红豆诗人9 小时前
C++二叉搜索树:查找、插入和删除为什么这样写
数据结构·c++·算法
HZjiangzi9 小时前
深耕精密驱动二十六载,捷昌驱动助力机器人产业升级发展
人工智能·算法
奋发向前wcx9 小时前
CSP-J复赛模拟赛3 王晨旭补题 2026.10.4
算法
H.莓飛9 小时前
【数据结构】堆_OJ题
linux·数据结构·算法