给定一个数组,从中找出相加之和等于N的所有元素组合

给定一个数组,从中找出相加之和等于N的所有元素组合。

例如,

A=[1,2,3,-3], N = 3

output:共有3种

1,2

3

1,2,3,-3
 
 
循环解法:
def subarraySum(nums, N):
    ans = 0 
    for start in range(len(nums)):
        sum = 0 
        for end in range(start,len(nums)):
            sum += nums[end] 
            if sum == N:
                ans+=1
    return ans
print(subarraySum([1,2,3], 3))
 
前缀和解法:
def subarraySum(nums, N):
    prefix_sum = 0  # 当前的前缀和
    prefix_map = {0: 1}  # 存储前缀和出现的次数(初始值为0出现1次)
    count = 0  # 子数组个数
    for n in nums:
        prefix_sum += n
        # 检查是否存在一个前缀和,使得当前区间的和为 N
        diff = prefix_sum - N
        if diff in prefix_map:
            count += prefix_map[diff]  # 累加满足条件的区间数量
        # 更新当前前缀和出现的次数
        if prefix_sum not in prefix_map:
            prefix_map[prefix_sum] = 0
        prefix_map[prefix_sum] += 1
    return count
 
print(subarraySum([1,2,3], 3))

 

 

posted on 2025-04-24 20:51  生活费  阅读(30)  评论(0)    收藏  举报

导航