Skip to content

hash

和为K的子数组

求数组中和为K的连续子数组。前缀和将问题转换为类似于两数之和的问题,再使用哈希。

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        // map of <sum, cnt>
        map<int, int> m;
        m[0] = 1;
        int sum = 0, ans = 0;
        for(int i = 0; i < nums.size(); i++){
            // cumsum
            sum += nums[i];
            // check answer
            if (m.count(sum - k)) ans += m[sum-k];
            // update map
            if (m.count(sum)) m[sum]++;
            else m[sum] = 1;
        }
        return ans;
    }
};