LeetCode 560 Subarray Sum Equals K【前缀和】

传送门

题意: 有多少个连续子序列和为给定的k,

思路: 连续, 就要想到前缀和, 所以我们利用前缀和的性质, 相减等于中间的和, 那么直接记录每个前缀的次数, 然后累加即可, 注意这类问题 0 这个数都是会作为默认点加的! 不要忘了,想想也是对的

AC Code

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        map<int, int>mp; mp[0] = 1;
        int sum = 0, ans = 0;
        for (int i = 0 ; i < nums.size() ; ++ i) {
            sum += nums[i];
            ans += mp[sum-k];
            ++ mp[sum];
        }
        return ans;
    }
};

你可能感兴趣的:(前缀和,leetcode,部分题解)