LeetCode 560. 和為K的子陣列(C++、python)
阿新 • • 發佈:2018-11-25
給定一個整數陣列和一個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。
示例 1 :
輸入:nums = [1,1,1], k = 2 輸出: 2 , [1,1] 與 [1,1] 為兩種不同的情況。
說明 :
陣列的長度為 [1, 20,000]。
陣列中元素的範圍是 [-1000, 1000] ,且整數 k 的範圍是 [-1e7, 1e7]。
C++
class Solution { public: int subarraySum(vector<int>& nums, int k) { int n=nums.size(); map<int,int> tmp; int sum=0; int ans=0; tmp[0]=1; for(int i=0;i<n;i++) { sum+=nums[i]; ans+=tmp[sum-k]; tmp[sum]++; } return ans; } };
python
class Solution: def subarraySum(self, nums, k): """ :type nums: List[int] :type k: int :rtype: int """ n=len(nums) res=0 dic={0:1} su=0 for i in range(n): su+=nums[i] if (su-k) in dic: res+=dic[su-k] if su not in dic: dic[su]=1 else: dic[su]+=1 return res