问题描述:
Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.
Example 1:
Input:nums = [1,1,1], k = 2 Output: 2
思路:记录从开始到位置i的累加和,再统计位置i之前有多少个累加和等于sum[i]-k.
代码:class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int n=nums.size();
if (n==0)
return 0;
//计算到位置i的累加和
vector<int> sum(n+1,0);
for (int i=1; i<=n; i++)
sum[i]=nums[i-1]+sum[i-1];
//查看在位置i之前,是否有sum[j]=sum[i]-k
unordered_map<int,int> hash;
hash[0]=1;
int res=0;
for (int i=1; i<=n; i++)
{
if (hash[sum[i]-k])
res+=hash[sum[i]-k];
hash[sum[i]]++;
}
return res;
}
};
本文介绍了一种高效算法来找出整数数组中所有连续子数组的个数,这些子数组的和等于给定的目标值K。通过使用哈希表记录前缀和出现的次数,可以在O(n)的时间复杂度内解决问题。
991

被折叠的 条评论
为什么被折叠?



