還是太菜了(我),寫了半天滑動窗口,然后看了答案又寫了半天時間超限……
總之就是記錄每前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;}
};