LeetCode 560. Subarray Sum Equals K
阿新 • • 發佈:2018-12-12
題解
看到連續子序列和,必然想到字首和。但是光有字首和這題還做不了,如何使得和為目標數目呢? 此題和前面做過的一道4SUM有點像,關鍵還是用map來儲存便於查詢。 設想 map[ sum ] 表示字首和為sum的數量,那麼當我們累計算得當前位置的和為sum時, 我們考察 map[ sum - k ] 的數量,這就是一份使得 目標數k 成立的答案。 看程式碼,很巧。
Code
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int n = nums.size() ;
unordered_map<int,int> m;
int sum=0,ans=0;
m[0]=1;
for(int i=0;i<n;i++){
sum+=nums[i];
if( m.count(sum-k))// sum - (sum-k) = k | 此時的sum-k恰好是在此位之前的 數量
ans+=m[sum-k];
m[sum]++;
}
return ans;
}
};