还是太菜了(我),写了半天滑动窗口,然后看了答案又写了半天时间超限……
总之就是记录每前n个子串的和,然后使用hash存储和为某个值出现的次数,每次求得新和就看看是否存在前面新和-k的字符,有的话加上数量就行。
class Solution {
public:int subarraySum(vector<int>& nums, int k) {int result=0;unordered_map<int,int> mp;mp[0]=1;int pre=0;for(int i=0;i<nums.size();i++){pre+=nums[i];if(mp.find(pre-k)!=0) result+=mp[pre-k];mp[pre]++;}return result;}
};