560. 和为K的子数组
一开始用的穷举,超时了
class Solution:
def subarraySum(self, nums: List[int], k: int) -> int:
counter=0
for i in range(len(nums)):
sum=0
a=i
while a<=len(nums)-1:
sum=sum+nums[a]
a+=1
if sum == k:
counter+=1
return counter
看题解可以用字典,遍历一遍列表,并计算之前所有元素的和 sum[i]=sum[i-1]+nums[i],计算是否有和为k的值也就是sum[i]-sum[j]=k, 此时计算sum[i]-k也就是sum[j]在字典里出现过几次就可以了
class Solution:
def subarraySum(self, nums: List[int], k: int) -> int:
counter=0
sum=0
mydict={0:1}
for i in nums:
sum+=i
if sum-k in mydict:
counter+=mydict[sum-k]
if sum in mydict:
mydict[sum]+=1
else:
mydict[sum]=1
return counter