LeetCode 560 Subarray Sum Equals K
思路
用一个map存储到目前为止,和为key的从0位置开始的子数组有多少个。每向前遍历一个元素,就更新map,然后计算当前和减去k的值,在map中查找该值是否存在,如果存在,说明存在子数组从0开始,加到某个位置j的和为该值。那么目标子数组是j到目前遍历到的位置i。
代码
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
unordered_map<int, int> mp;
int sum = 0, cnt = 0;
mp[0] = 1;
for (int i = 0; i < nums.size(); ++i) {
sum += nums[i];
if (mp.count(sum - k))
cnt += mp[sum - k];
++mp[sum];
}
return cnt;
}
};
总结
此题是two sum的变种。