给定一个数组,从中找出相加之和等于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))
浙公网安备 33010602011771号