问题描述
def subarraySum(self,nums: List[int],k: int) -> int:
count = 0
target = k
self.cal(nums,target,count,k)
return count
def cal(nums,k):
if target == 0:
count = count+1
target = k
return count,target
if target<0:
return
for i in range(len(nums)):
self.cal(nums[:i]+nums[i+1:],target-nums[i],k)
''' 在这里,当目标
解决方法
您可以尝试使用 prefix
的想法和 defaultdict()
更优雅、更高效地解决这个子数组求和问题。这取决于 prefix
sum 想法,代码很容易理解,您可以尝试使用不同的数据运行它。在 dc[v]
中,我们存储所有前缀和,即 num。上一页前缀 sum 值为 v。然后它循环和数组以查看是否有新的 num。 w
coming 具有满足 w-v equal k
的值,然后我们得到一个新的 count(pair)。
from collections import defaultdict
class Solution:
def subarraySum(self,nums: List[int],k: int) -> int:
dc = defaultdict(int)
sum_ = 0
dc[0] = 1
result = 0
for n in nums:
sum_ += n
if sum_ - k in dc:
result += dc[sum_ - k]
dc[sum_] += 1
return result