leetcode 560 和为k的自数组

和为k的自数组

leetcode 560 和为k的自数组_第1张图片

高刷题(暴力超时)

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        int result = 0;
        int sum = 0;
        for(int i=0 ; i<nums.size() ; i++)
        {
            for(int j=i ; j<nums.size() ; j++)
            {
                sum += nums[j];
                if(sum == k) result++;
            }
            sum = 0;
        }
        return result;
    }
};

高刷题(前缀和 + map)

leetcode 560 和为k的自数组_第2张图片

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        int result = 0;
        int pre = 0;
        unordered_map<int , int> preMap;
        preMap[pre]++;

        for(int i=0 ; i<nums.size() ; i++)
        {
            pre += nums[i];

            if(preMap.find( pre -k ) != preMap.end() ) 
                result += preMap[pre-k];
            preMap[pre]++;
        }
        return result;
    }
};

你可能感兴趣的:(算法刷题,高频题,leetcode,算法,数据结构)