有人能帮我理解这段代码的作用吗?他的逻辑、输出等
// currsum exceeds given sum by currsum
// - sum. Find number of subarrays having
// this sum and exclude those subarrays
// from currsum by increasing count by
// same amount.
if (prevSum.find(currsum - sum) != prevSum.end())
res += (prevSum[currsum - sum]);
整个代码:"给定一个未排序的整数数组,求和恰好等于给定数k的子数组的数目;
#include<bits/stdc++.h>
using namespace std;
int cntSubarrays(vector<int>arr,int sum){
//complete this method
unordered_map<int, int> prevSum;
int n = arr.size();
int res = 0;
// Sum of elements so far.
int currsum = 0;
for (int i = 0; i < n; i++) {
// Add current element to sum so far.
currsum += arr[i];
// If currsum is equal to desired sum,
// then a new subarray is found. So
// increase count of subarrays.
if (currsum == sum)
res++;
// currsum exceeds given sum by currsum
// - sum. Find number of subarrays having
// this sum and exclude those subarrays
// from currsum by increasing count by
// same amount.
if (prevSum.find(currsum - sum) != prevSum.end())
res += (prevSum[currsum - sum]);
// Add currsum value to count of
// different values of sum.
prevSum[currsum]++;
}
return res;
}
您询问的这两行是查看某个key
是否在map
中并获取与该key
关联的value
的典型方法。在使用operator[]
访问映射之前,您必须检查映射中是否有(key, value)
对,因为如果没有,那么map[key]
将为该键插入一对值类型的默认值,而这通常不是我们想要的。
此处介绍
返回对映射到与键等效的键的值的引用,如果该键不存在,则执行插入。