子数组总和等于K

时间:2019-05-21 20:49:04

标签: python algorithm recursion

给定一个整数数组和一个整数k,您需要找到总和等于k的连续子数组的总数。

尝试解决leetcode之外的问题,不确定确切的位置以及如何找到正确的解决方案。在nums = [0,0,0,0,0,0,0,0,0,0]和k = 0的情况下失败,当实际上应该为55时,我得到的答案是10

class Solution(object):
    def subarraySum(self, nums, k):
        count = 0
        for i in range(0, len(nums)): 
            count += self.driver(nums, k, nums[i], i+1)
        return count


    def driver(self, nums, target, curr, index): 
        if curr == target:
            return 1
        else:
            for i in range(index, len(nums)): 
                return self.driver(nums, target, curr + nums[i], i+1)
            return 0

1 个答案:

答案 0 :(得分:0)

使用itertools的累加功能,会更容易。

from itertools import accumulate
def subarraySum(a,k):
    return sum( list(accumulate(a[i:])).count(k) for i in range(len(a)) )

print(subarraySum([0,0,0,0,0,0,0,0,0,0],0)) # 55

只要让accumulate()进行从数组中每个位置到末尾的累加和,并计算它达到所需值的次数。这将涵盖零以及负数的情况。

如果不允许使用导入的模块,则可以编写自己的累积迭代器:

def accumulate(a):
    s = 0
    for v in a: s+=v; yield s