计数具有目标和的子阵列



有人能帮我理解这段代码的作用吗?他的逻辑、输出等

// 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]将为该键插入一对值类型的默认值,而这通常不是我们想要的。

此处介绍

返回对映射到与键等效的键的值的引用,如果该键不存在,则执行插入。

最新更新