建设部网站从何时可以查询工程师证,重庆九龙坡营销型网站建设价格,最火网站排名,工作室项目网站和为k的子数组 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址#xff1a;点这里 2. 讲解算法原理 创建一个无序映射#xff08;哈希表#xff09; hash#xff0c;用于统计前缀和的出现次数。初始时#xff0c;将前缀和为 0 的次数设为 1#xff0c;表示… 和为k的子数组 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址点这里 2. 讲解算法原理 创建一个无序映射哈希表 hash用于统计前缀和的出现次数。初始时将前缀和为 0 的次数设为 1表示从数组开头到当前位置的累计和为 0 的子数组个数为 1。 初始化两个变量 sum 和 ret分别表示当前的前缀和和满足条件的子数组个数初始时都设为 0。 遍历数组 nums 的每个元素 e 将 e 加到 sum 中更新当前的前缀和。 检查 hash 中是否存在前缀和为 sum - k 的记录即是否存在一个位置 i使得从位置 i 到当前位置的子数组的和为 k。如果存在将 hash[sum - k] 的值累加到 ret 中表示找到了满足条件的子数组。 更新 hash[sum]将前缀和 sum 的出现次数加 1。 完成遍历后返回 ret即满足条件的子数组的个数。 3. 编写代码
class Solution {
public:int subarraySum(vectorint nums, int k) {unordered_mapint,int hash;//统计前缀和次数hash[0]1;int sum0,ret0;for(auto e:nums){sume;if(hash.count(sum-k)) rethash[sum-k];hash[sum];}return ret;}
};