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;
    }
};
相关推荐
hetao17338375 小时前
2026-08-21~23 hetao1733837 的刷题记录
c++·算法
青 春 记 忆5 小时前
LeetCode 206. 反转链表|Python 解法详解
python·leetcode·链表
CQU_JIAKE6 小时前
8.23【A】
算法
sprlightning6 小时前
LHDC V5 算法深度解析
算法·fft·lhdcv5·imdct·mdct·rice·fac
csdn_aspnet6 小时前
C# 第k个最小元素(K’th Smallest Element)
算法·c#·排序算法
BioRunYiXue6 小时前
RACE技术全攻略:从全长克隆到靶基因验证
java·javascript·网络·人工智能·科技·算法·eclipse
ZPC82107 小时前
joy 及sensor_msgs
算法
Three_ST7 小时前
沐神-动手学习深度学习-习题答案4.4模型选择,欠拟合,过拟合
人工智能·python·深度学习·学习·算法
CIO_Alliance7 小时前
AI深度系列(2)| CNN卷积池化感受野原理:从局部感知到全局视野
人工智能·深度学习·线性代数·算法·计算机视觉·企业ai转型·企业cio联盟