提交 47409bee 编写于 作者: J jasper

增加CPP版本

上级 db93191f
......@@ -133,9 +133,62 @@ for (int i = 1; i < count.length; i++)
![labuladong](../pictures/labuladong.jpg)
[labuladong](https://github.com/labuladong) 提供JAVA解法代码:
```
int subarraySum(int[] nums, int k) {
int n = nums.length;
// map:前缀和 -> 该前缀和出现的次数
HashMap<Integer, Integer>
preSum = new HashMap<>();
// base case
preSum.put(0, 1);
int ans = 0, sum0_i = 0;
for (int i = 0; i < n; i++) {
sum0_i += nums[i];
// 这是我们想找的前缀和 nums[0..j]
int sum0_j = sum0_i - k;
// 如果前面有这个前缀和,则直接更新答案
if (preSum.containsKey(sum0_j))
ans += preSum.get(sum0_j);
// 把前缀和 nums[0..i] 加入并记录出现次数
preSum.put(sum0_i,
preSum.getOrDefault(sum0_i, 0) + 1);
}
return ans;
}
```
[Jinglun Zhou](https://github.com/Jasper-Joe) 提供C++解法代码:
```CPP
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int n=nums.size();
unordered_map<int,int> preSum;
// map: 前缀和 -> 该前缀和出现的次数
preSum[0]=1; // base case: 例如当数组中只有一个元素, 而k恰好等于这个元素
int ans=0, sum0_i=0; // sum0_i 表示前缀和 nums[0...i]
for(int i=0;i<n;i++)
{
sum0_i +=nums[i];
// 这是我们想找的前缀和 nums[0...j]
int sum0_j=sum0_i-k;
// 如果前面有这个前缀和,则直接更新答案
if(preSum.count(sum0_j))
ans+=preSum[sum0_j];
//把前缀和 nums[0...i] 加入并记录出现次数
preSum[sum0_i]++; // 把当前的前缀和加入到map中
}
return ans;
}
};
```
[上一篇:烧饼排序](../算法思维系列/烧饼排序.md)
[下一篇:字符串乘法](../算法思维系列/字符串乘法.md)
[目录](../README.md#目录)
\ No newline at end of file
[目录](../README.md#目录)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册