半✅\(^o^)/~
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
示例 1 :
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
思路:
1. 用map数据结构。
2. 定义变量cur表示前i个数的总和, res表示结果。
3. 存在的一个和为K的子数组等于连续总数组减去它前面的子数组。(有点拗口)
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int res=0, cur=0;
unordered_map<int, int> um;
um[0]=1;
for (int num: nums)
{
cur+=num;
res+=um.find(cur-k)==um.end()?0:um[cur-k];
++um[cur];
}
return res;
}
};