1. 程式人生 > >LeetCode 560. Subarray Sum Equals K

LeetCode 560. Subarray Sum Equals K

題解

看到連續子序列和,必然想到字首和。但是光有字首和這題還做不了,如何使得和為目標數目呢? 此題和前面做過的一道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; }
};