LeetCode 560 Subarray Sum Equals K

474 阅读1分钟

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的变种。